设计“总在上现”的窗口

发表于:2007-07-04来源:作者:点击数: 标签:
旷 强 什么是“总在上面”呢?就是这个窗口总是停留在其他窗口的上面。那么,这个TopMost窗口怎样设计呢?请看下面的“招儿”: 这个“总在上面”的窗口的实现需要用到一个API函数——SetWindowPos。这个函数的格式如下: Function SetWindowPos Lib ″user32
旷 强

  什么是“总在上面”呢?就是这个窗口总是停留在其他窗口的上面。那么,这个TopMost窗口怎样设计呢?请看下面的“招儿”:

  这个“总在上面”的窗口的实现需要用到一个API函数——SetWindowPos。这个函数的格式如下:

  Function SetWindowPos Lib ″user32″(ByVal hWnd As Long,ByVal hWndInsertAfter As Long,ByVal x As Long,ByVal y As Long ,ByVal cx As Long,ByVal cy As Long,ByVal wFlags As Long)As Long

  函数的参数意义如下:

  hWnd——所处理窗口的句柄。

  hWndInsertAfter——窗口的句柄,它将在Z轴顺序上先于该窗口。这个变量可以赋以下值中的一种,从而成为窗口的句柄:HWND—BOTTOM(=1,将窗口放置在Z轴顺序的底端)、HWND——TOP(=0,将窗口放置在Z轴顺序的顶端)、HWND—TOPMOST(=-1,将窗口放置在所有非首页窗口的上面)或者HWND—NOTOPMOST(=2,对在所有非首页窗口的顶端窗口重新定位)。

  x——规定窗口左边的新位置。

  y——规定窗口上边的新位置。

  cx——规定窗口的新宽度。

  cy——规定窗口的新高度。

  wFlags——规定大小和定位选择,如表所示。

  接下来我们该看一个例子。

  先设置一个200×200像素的窗口,然后声名API函数SetWindowPos:

  Declare Function SetWindowPos Lib ″user32″ Alias ″SetWindowPos″ (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

  并定义各个常量的值,如下:

  const SWP—SHOWWINDOW=&H40

  const SWP—DRAWFRAME=&H20

  const HWND—TOPMOST=-1

  然后,在Form—Load子程序中填写如下代码就可以使其成为首页了:

  Sub Form—Load()

  retval=SetWindowPos(Form1.hwnd, HWND—TOPMOST, 100, 100, 100, 100, SWP—DRAWFRAME Or SWP—SHOWWINDOW)

  End Sub

  到此为止,我们已经完成了这个TopMost的所有工作,它现在已经可以保持在其他窗口之上了。试试看?

常   量 含    义 swp_noredraw=&h8 不重绘变化,如果设置该标志则对任何出现的变化都不在重绘 swp_drawframe=&h20 围绕窗口绘制一帧 swp_framechanged=&h20 给窗口发送一wn_nclearcase/" target="_blank" >ccalcsize信息,使窗口的大小不再调整。如果该标志不加以限定,wn_nccalcsize信息只有在窗口的大小变化时才发送。 swp_hidewindow=&h80 隐藏窗口 swp_noactivate=&h10 不能活动的窗口 swp_nocopybits=&h100 丢弃客户区的所有内容 swp_nomove=&h2 保持当前的位置 swp_noownerzorder=&h200 窗口在z轴的位置不变 swp_noreposition=swp_noownerzorder 与swp_noownerzorder一样 swp_nosize=&h1 保持当前的尺寸,忽略变量cx和cy swp_nozorder=&h4 保持当前的顺序,忽略hwndinsertafter swp_showwindow=&h40 显示窗口

 

原文转自:http://www.ltesting.net