相關(guān)軟件 >VB中讓窗體始終處于最前面 創(chuàng)建者:webmaster 更新時(shí)間:2005-05-18 00:01 我們先來(lái)看看SetWindowPos函數(shù)的定義和參數(shù): 使用API函數(shù)之前必須先在程序中聲明如下: Private Declare 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 其中各參數(shù)的意義如下: 參數(shù) 意義 hwnd Long 欲定位的窗口 hWndInsertAfter Long 窗口句柄。在窗口列表中,窗口hwnd會(huì)置于這個(gè)窗口句柄的后面 x,y Long 窗口新的x,y坐標(biāo) cx,cy Long 指定新的窗口寬度和高度 wFlags Long 包含了旗標(biāo)的一個(gè)整數(shù),是下列之一 返回值 Long 非零表示成功,零表示失敗 下面是部分wFlags參數(shù)和它們的意義: 參數(shù) 意義和使用方法 SWP_DRAWFRAME 圍繞窗口畫(huà)一個(gè)框 SWP_HIDEWINDOW 隱藏窗口 SWP_NOACTIVATE 不激活窗口 SWP_NOMOVE 保持當(dāng)前位置 (x和y設(shè)定將被忽略) &H2 SWP_NOREDRAW 窗口不自動(dòng)重畫(huà) SWP_NOSIZE 保持當(dāng)前大小 (cx和cy會(huì)被忽略) &H1 SWP_NOZORDER 保持窗口在列表的當(dāng)前位置 (hWndInsertAfter將被忽略) SWP_SHOWWINDOW 顯示窗口 &H40 SWP_FRAMECHANGED 強(qiáng)迫一條WM_NCCALCSIZE消息進(jìn)入窗口,即使窗口的大小沒(méi)有改變 函數(shù)的使用很簡(jiǎn)單,我們只須在Form_Load中加入如下語(yǔ)句即可: retValue = SetWindowPos(Me.hwnd, HWND_TOPMOST, Me.CurrentX, Me.CurrentY, 300, 300, SWP_SHOWWINDOW) 這樣窗體就能保持在所有窗體的前面了。 為了學(xué)習(xí) 方便,下面提供了源碼: 注釋?zhuān)?------------------------------------------ 注釋?zhuān)?讓一個(gè)窗體總是處于最前的例子 注釋?zhuān)?------------------------------------------ 注釋?zhuān)撼绦蛘f(shuō)明: 注釋?zhuān)罕纠龖?yīng)用SetWindowPos函數(shù),設(shè)置窗體的顯示屬性 注釋?zhuān)簛?lái)實(shí)現(xiàn)讓一個(gè)窗體總是處于其他 窗體的前面而不會(huì) 注釋?zhuān)罕黄渌绑w所遮住。 注釋?zhuān)?------------------------------------------ Option Explicit 注釋?zhuān)骸綱B聲明】 注釋?zhuān)?Private Declare 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 注釋?zhuān)骸菊f(shuō)明】 注釋?zhuān)?這個(gè)函數(shù)能為窗口指定一個(gè)新位置和狀態(tài)。它也可改變窗口在內(nèi)部窗口列表中的位置。該函數(shù)與DeferWindowPos函數(shù)相似,只是它的作用是立即表現(xiàn)出來(lái)的(在vb里使用:針對(duì)vb窗體,如它們?cè)趙in32下屏蔽或最小化,則需重設(shè)最頂部狀態(tài)。如有必要,請(qǐng)用一個(gè)子類(lèi)處理模塊來(lái)重設(shè)最頂部狀態(tài) 注釋?zhuān)骸痉祷刂怠? 注釋?zhuān)?Long,非零表示成功,零表示失敗。會(huì)設(shè)置GetLastError 注釋?zhuān)骸緜渥ⅰ? 注釋?zhuān)?窗口成為最頂級(jí)窗口后,它下屬的所有窗口也會(huì)進(jìn)入最頂級(jí)。一旦將其設(shè)為非最頂級(jí),則它的所有下屬和物主窗口也會(huì)轉(zhuǎn)為非最頂級(jí)。Z序列用垂直于屏幕的一根假想Z軸量化這種從頂部到底部排列的窗口順序 注釋?zhuān)骸緟?shù)表】 注釋?zhuān)?hwnd ----------- Long,欲定位的窗口 注釋?zhuān)?hWndInsertAfter - Long,窗口句柄。在窗口列表中,窗口hwnd會(huì)置于這個(gè)窗口句柄的后面。也可能選用下述值之一: 注釋?zhuān)?HWND_BOTTOM 將窗口置于窗口列表底部 注釋?zhuān)?HWND_TOP 將窗口置于Z序列的頂部;Z序列代表在分級(jí)結(jié)構(gòu)中,窗口針對(duì)一個(gè)給定級(jí)別的窗口顯示的順序 注釋?zhuān)?HWND_TOPMOST 將窗口置于列表頂部,并位于任何最頂部窗口的前面 -1 注釋?zhuān)?HWND_NOTOPMOST 將窗口置于列表頂部,并位于任何最頂部窗口的后面 -2 注釋?zhuān)?x -------------- Long,窗口新的x坐標(biāo)。如hwnd是一個(gè)子窗口,則x用父窗口的客戶(hù)區(qū)坐標(biāo)表示 注釋?zhuān)?y -------------- Long,窗口新的y坐標(biāo)。如hwnd是一個(gè)子窗口,則y用父窗口的客戶(hù)區(qū)坐標(biāo)表示 注釋?zhuān)?cx ------------- Long,指定新的窗口寬度 注釋?zhuān)?cy ------------- Long,指定新的窗口高度 注釋?zhuān)?wFlags --------- Long,包含了旗標(biāo)的一個(gè)整數(shù),是下列之一: 注釋?zhuān)?SWP_DRAWFRAME 圍繞窗口畫(huà)一個(gè)框 注釋?zhuān)?SWP_HIDEWINDOW 隱藏窗口 注釋?zhuān)?SWP_NOACTIVATE 不激活窗口 &H10 注釋?zhuān)?SWP_NOMOVE 保持當(dāng)前位置 (x和y設(shè)定將被忽略) &H2 注釋?zhuān)?SWP_NOREDRAW 窗口不自動(dòng)重畫(huà) 注釋?zhuān)?SWP_NOSIZE 保持當(dāng)前大小 (cx和cy會(huì)被忽略) &H1 注釋?zhuān)?SWP_NOZORDER 保持窗口在列表的當(dāng)前位置 (hWndInsertAfter將被忽略) 注釋?zhuān)?SWP_SHOWWINDOW 顯示窗口 &H40 注釋?zhuān)?SWP_FRAMECHANGED 強(qiáng)迫一條WM_NCCALCSIZE消息進(jìn)入窗口,即使窗口的大小沒(méi)有改變 Private Declare 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 Const HWND_TOPMOST = -1 Const SWP_SHOWWINDOW = &H40 Private Sub Form_load() Dim retValue As Long 注釋?zhuān)簩⒋绑w設(shè)置為處于所有窗口的頂層,注意在 VB 中運(yùn)行時(shí), '可能不行,但編譯成EXE后就可以了 retValue = SetWindowPos(Me.hwnd, HWND_TOPMOST, Me.CurrentX, Me.CurrentY, 300, 300, SWP_SHOWWINDOW) End Sub 相關(guān)文章 本頁(yè)查看次數(shù):