呼叫api函式setwindowpos可達到這一目的。該函式的語法是:
setwindowpos hwnd, hwndinsetafter, x, y, cx, xy, wflags
其中:
hwnd ---- 窗體的控制代碼(handle)。
hwndinsetafter ---- 它就是決定是否「總在前」的引數,
應用中設定為: hwnd_topmost 總在前
hwnd_notopmost 正常的
x,y,cx,cy ----表示窗體的位置和大小的引數,在實際應用中可忽略。
wflags ---- 決定窗體是否可以移動和改變尺寸,
一般設定成這樣的形式: swp_nomove or swp_nosize。
使用api函式之前必須先在程式中宣告如下:
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
其中各引數的意義如下:
引數 意義
hwnd long 欲定位的視窗
hwndinsertafter long 視窗控制代碼。在視窗列表中,視窗hwnd會置於這個視窗控制代碼的後面
x,y long 視窗新的x,y座標
cx,cy long 指定新的視窗寬度和高度
wflags long 包含了旗標的乙個整數,是下列之一
返回值 long 非零表示成功,零表示失敗
下面是部分wflags引數和它們的意義:
引數 意義和使用方法
swp_drawframe 圍繞視窗畫乙個框
swp_hidewindow 隱藏視窗
swp_noactivate 不啟用視窗
swp_nomove 保持當前位置 (x和y設定將被忽略) &h2
swp_noredraw 視窗不自動重畫
swp_nosize 保持當前大小 (cx和cy會被忽略) &h1
swp_nozorder 保持視窗在列表的當前位置 (hwndinsertafter將被忽略)
swp_showwindow 顯示視窗 &h40
swp_framechanged 強迫一條wm_nccalcsize訊息進入視窗,即使視窗的大小沒有改變
函式的使用很簡單,我們只須在form_load中加入如下語句即可:
retvalue = setwindowpos(me.hwnd, hwnd_topmost, me.currentx, me.currenty, 300, 300, swp_showwindow)
這樣窗體就能保持在所有窗體的前面了。
為了學習方便,下面提供了原始碼:
注釋:-------------------------------------------
注釋: 讓乙個窗體總是處於最前的例子
注釋:-------------------------------------------
注釋:程式說明:
注釋:本例應用setwindowpos函式,設定窗體的顯示屬性
注釋:來實現讓乙個窗體總是處於其他窗體的前面而不會
注釋:被其他窗體所遮住。
注釋:-------------------------------------------
option explicit
注釋:【vb宣告】
注釋: 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
注釋:【說明】
注釋: 這個函式能為視窗指定乙個新位置和狀態。它也可改變視窗在內部視窗列表中的位置。該函式與deferwindowpos函式相似,只是它的作用是立即表現出來的(在vb裡使用:針對vb窗體,如它們在win32下遮蔽或最小化,則需重設最頂部狀態。如有必要,請用乙個子類處理模組來重設最頂部狀態
注釋:【返回值】
注釋: long,非零表示成功,零表示失敗。會設定getlasterror
注釋:【備註】
注釋: 視窗成為最頂級視窗後,它下屬的所有視窗也會進入最頂級。一旦將其設為非最頂級,則它的所有下屬和物主視窗也會轉為非最頂級。z序列用垂直於螢幕的一根假想z軸量化這種從頂部到底部排列的視窗順序
注釋:【參數列】
注釋: hwnd ----------- long,欲定位的視窗
注釋: hwndinsertafter - long,視窗控制代碼。在視窗列表中,視窗hwnd會置於這個視窗控制代碼的後面。也可能選用下述值之一:
注釋: hwnd_bottom 將視窗置於視窗列表底部
注釋: hwnd_top 將視窗置於z序列的頂部;z序列代表在分級結構中,視窗針對乙個給定級別的視窗顯示的順序
注釋: hwnd_topmost 將視窗置於列表頂部,並位於任何最頂部視窗的前面 -1
注釋: hwnd_notopmost 將視窗置於列表頂部,並位於任何最頂部視窗的後面 -2
注釋: x -------------- long,視窗新的x座標。如hwnd是乙個子視窗,則x用父視窗的客戶區座標表示
注釋: y -------------- long,視窗新的y座標。如hwnd是乙個子視窗,則y用父視窗的客戶區座標表示
注釋: cx ------------- long,指定新的視窗寬度
注釋: cy ------------- long,指定新的視窗高度
注釋: wflags --------- long,包含了旗標的乙個整數,是下列之一:
注釋: swp_drawframe 圍繞視窗畫乙個框
注釋: swp_hidewindow 隱藏視窗
注釋: swp_noactivate 不啟用視窗 &h10
注釋: swp_nomove 保持當前位置 (x和y設定將被忽略) &h2
注釋: swp_noredraw 視窗不自動重畫
注釋: swp_nosize 保持當前大小 (cx和cy會被忽略) &h1
注釋: swp_nozorder 保持視窗在列表的當前位置 (hwndinsertafter將被忽略)
注釋: swp_showwindow 顯示視窗 &h40
注釋: swp_framechanged 強迫一條wm_nccalcsize訊息進入視窗,即使視窗的大小沒有改變
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
注釋:將窗體設定為處於所有視窗的頂層,注意在 vb 中執行時,
』可能不行,但編譯成exe後就可以了
retvalue = setwindowpos(me.hwnd, hwnd_topmost, me.currentx,
me.currenty, 300, 300, swp_showwindow)
end sub
讓MessageBox在最前面顯示
用 引數messageboxtext 型別 system.string 指定文字顯示的 string caption 型別 system.string 指定標題欄宣告中顯示的 string button 型別 system.windows.messageboxbutton 指定的 messagebo...
如何讓視窗始終保持在最前面
如何讓視窗始終保持在最前面 飄飄白雲 20090110 問題 讓目標視窗始終保持在最前面,無論這個視窗是模式的還是模式的。思路 取得當前最前面視窗的title,如果title不是與目標視窗的title不相同 說明目標視窗不是在最前面 列舉視窗,找到目標視窗,設定它為最前面。說話 static wch...
利用托盤將最小化的窗體顯示在最前面
在論壇裡面看到說了很多方法,如 1 this.topmost true 讓程式窗體總在其他所有窗體的最上面 2 this.activate 3 this.bringtofront 4 dllimport user32.dll entrypoint setforegroundwindow public...