利用VB控制窗口显示风格

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 gnuljf 的 blog

利用vb控制窗口显示风格
http://www.tongyi.net  作者:天涯风铃    点击:504  

  软件界面生动与否很大程度上决定于你对窗口的设计和控制。事实上,windows程序员可以对系统中的任何窗口进行操纵,它意味着,windows程序员可以直接操纵任何正在运行的应用窗口;可以发现一个特定的应用是否在运行,如果该应用没有运行还可以启动它;可以重新排列屏幕上的所有窗口;还可以使其他应用的窗口最大化或最小化。下面我们探讨一种十分有意义的应用。

  我们很希望在程序激活其它窗口时仍使得封面窗口处于前台,也就是说该窗口具有“总在最前面”(“always on top”)这一特性。其实microsoft系列软件都是这样做的,当你运行word、excel或powerpoint时,你会发现它们的封面窗口不随系统激活其它窗口而消失。

  visual basic for windows(以下简称vb)作为一种可视化编程软件,以其优秀的图形化界面设计风格而著称。利用它可使软件开发周期大为缩短,然而vb对windows dll(动态链接库)调用的强大功能却易受不少程序员所忽略。事实上,灵活应用windows dll的api(应用程序接口)才能使你开发的系统更加充满活力。正是由于vb支持dll使得我们可以随心所欲地控制窗口显示风格,从而我们可以让系统封面总处于前台,下面说明用到的api函数。

  .setwindowposvb定义:

  declare sub setwindowposlib“user”(bybal hwnd as integer,hwndinsertafter as integer,byvalXas integer,byvalYas integer,byval cx as integer,byval cy as integer,byval wflags as integer)

  说明:能改变窗口的位置和大小,并能修改窗口在内部窗口列表中所处的位置,以控制显示次序。

  参数类型/说明hwnd integer-需定位的窗口hwndinsertafter integer-窗口句柄,在窗口列表里,

  窗口hwnd将放在该窗口句柄的后面,它可以取以下值:

  hwnd_bottom:把窗口放在窗口列表的底部;

  hwnd-top:把窗口放在Z序的顶部。Z序是窗口按层次级别显示的顺序;

  hwnd_top(most):把窗口放在列表的顶部,位于所有最顶窗口之后。

  x integer—窗口新的x坐标,如果hwnd是一个子窗口,x给出的是父窗口的客户坐标。

  y integer—窗口新的y坐标,如果hwnd是一个子窗口,y给出的是父窗口的客户坐标。

  cx integer—指定新窗口宽度。

  cy integer—指定新窗口高度。

  wflags integer—包含下列标志之一的整数:

  swp_drawframe:围绕窗口画一个边框;

  swp_hidewindow:隐藏该窗口;

  swp_noactivate:不激活该窗口;

  swp_nomove:保持当前位置(X和Y被忽略);

  swp_noredraw:窗口不自动重画;

  swp_nosize:保持当前大小(cx和cy被忽略);

  swp_nozorder:保持窗口列表中的当前位置(hwndinsertafter被忽略);

  swp_showwindow:显示该窗口。

  注释:当一个窗口成为最顶窗口时,它所有的从属窗口也成为最顶窗口;当它成为非最顶窗口时,它全部的从属窗口和拥有窗口也成为非最顶窗口,Z序表示窗口沿着从屏幕里向外延伸的假想Z轴,从顶到底的排列次序。

  vb实现窗口拥有“always on top”特性:

  首先,定义全局常量及函数。

global const hwnd_topmost=-1
global const swp_noactivate=&H10
global const swp_showwindow=&H40
declare sub setwindowposlib “user” bybal hwnd as integer,hwndinsertafter as integer,byval X as integer,byval Y as integer,byval cx as integer,byval cy as integer,byval wflags as integer)


主程序如下编写:


sub main 0
screen.mousepointer=11'使鼠标变为漏斗状
load systemcover'装载系统封面窗体
setwindowPos systemcover.hwnd,hwnd_topmost,0,0,0,0,swp_noactivate or swp_showwindow'使得封面总处于最前面
load initwindow1'装载初始化窗体1
load initwindow2'装载初始化窗体2


unload systemcover'关闭系统封面窗体
screen.mousepointer=0
'使鼠标变为缺省形状
end sub

本文关键:利用VB控制窗口显示风格
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top