在visual basic中如何拖動(dòng)窗體或控件
現(xiàn)在的許多windows下的應(yīng)用程序,都采用了圖形化的界面,例如:winamp等!這樣做的好處是可以使程序界面更漂亮生動(dòng),更具吸引力。但是在這樣的界面下就不能使用windows原來的標(biāo)題條了,否則會(huì)影響界面的美觀性。那么在沒有標(biāo)題條的情況下如何用鼠標(biāo)拖動(dòng)窗體呢?或者拖動(dòng)其它的控件呢?
其實(shí),采用api函數(shù)調(diào)用很容易實(shí)現(xiàn),下面我們以拖動(dòng)窗體(form1)為例來具體講一下實(shí)現(xiàn)方法:
1.新建立一個(gè)項(xiàng)目,名稱為:test.vbp.
2. 填加一個(gè)模塊,名稱為:test.bas,并且在聲明部分加入以下代碼:
declare function releasecapture lib "user32" () as long
declare function sendmessage lib "user32" alias "sendmessagea" (byval hwnd as long, byval wmsg as long, byval wparam as long, lparam as any) as long
public const wm_syscommand = &h112
public const sc_move = &hf012
其中releasecapture函數(shù)是用來釋放鼠標(biāo)捕獲的,sendmessage函數(shù)是一個(gè)在windowsapi中非常重要的函數(shù),在這里的作用是用來向windows發(fā)送移動(dòng)窗體的消息。wm_syscommand是向windows發(fā)送消息的常量。sc_move是控制移動(dòng)窗體的常量。請(qǐng)注意:這里sc_move的賦值一定要是&hf012,它表示鼠標(biāo)對(duì)象。
3.在窗體的mousedown過程中加入以下代碼:
releasecapture
sendmessage form1.hwnd, wm_syscommand, sc_move, 0
其中releasecapture函數(shù)用來釋放鼠標(biāo)捕獲,sendmessage函數(shù)向windows發(fā)送移動(dòng)窗體的消息。
4.保存并運(yùn)行程序,按下鼠標(biāo),你會(huì)發(fā)現(xiàn)窗體會(huì)隨著鼠標(biāo)的移動(dòng)而移動(dòng)。就和其它著名的應(yīng)用程序一樣。
以上講述了如何在vb中用鼠標(biāo)拖動(dòng)窗體,其實(shí),控件的拖動(dòng)的原理是一樣的。
例如以下代碼可以實(shí)現(xiàn)圖片框的拖動(dòng):
releasecapture
sendmessage picture1.hwnd, wm_syscommand, sc_move, 0
其實(shí),運(yùn)用api函數(shù)可以實(shí)現(xiàn)許多你意想不到的功能。如果需要更多有關(guān)vb的其它經(jīng)驗(yàn)與技巧。建議訪問http://vb2000.kstar.com站點(diǎn)。
拖動(dòng)無系統(tǒng)標(biāo)準(zhǔn)標(biāo)題欄的窗口
吳斌
大家知道,在vb中可以通過設(shè)置form的屬性,制作無系統(tǒng)標(biāo)題欄的窗口。可是,由于失去了系統(tǒng)標(biāo)題欄,如何使用鼠標(biāo)拖動(dòng)窗口便成了一個(gè)棘手的問題。其實(shí),借助api函數(shù)releasecapture和sendmessage,這個(gè)問題便可迎刃而解了。
首先,在module文件中加入下列聲明語句:
declare sub releasecapture lib"user"()
declare function sendmessage lib"user"(byval hwnd _
as integer,byval wmsg as integer,byval wparam as integer,_lparam as any)as long
public const wm_syscommand=&h112
public const sc_move=&hf010
public const htcaption=2
然后,在form的mousedown事件中加入下列代碼:
releasecapture
ret&=sendmessage(me.hwnd,wm_syscommand,_sc_move+htcaption,0)
……
程序運(yùn)行后,只要當(dāng)光標(biāo)落在form區(qū)域時(shí)按住鼠標(biāo)左鍵,便可以拖動(dòng)窗口了。在一些要求生動(dòng)活潑的界面的程序設(shè)計(jì)中,開發(fā)者常常希望自制風(fēng)格獨(dú)特的標(biāo)題欄,以滿足整個(gè)界面的要求。通過這個(gè)方法,就可以使自制的標(biāo)題欄達(dá)到亂真的地步。不過,用作自制標(biāo)題欄的控件,必須具有mousedown事件以擺放上述代碼。
移動(dòng)沒有標(biāo)題欄的窗口
我們一般是用鼠標(biāo)按住窗口的標(biāo)題欄,然后移動(dòng)窗口,當(dāng)窗口沒有標(biāo)題欄時(shí),我們可以用下面的方法來移動(dòng)窗口:
在 bas 文件中聲明:
declare function releasecapture lib "user32" () as long
declare function sendmessage lib "user32" _
alias "sendmessagea" ( _
byval hwnd as long, byval wmsg as long, _
byval wparam as long, lparam as any) as long
public const htcaption = 2
public const wm_nclbuttondown = &ha1
然后,在 form_mousedown 事件中:
private sub form_mousedown(button as integer, shift as integer, x as single, y as single)
releasecapture
sendmessage hwnd, wm_nclbuttondown, htcaption, 0&
end sub
vb編程中窗體的控制技巧
在visual basic中,每個(gè)應(yīng)用程序都是從窗體(form)開始的,窗體是構(gòu)成用戶接口的所有控件的容器。錄活運(yùn)用窗體的各項(xiàng)屬性和操作,可以為用戶設(shè)計(jì)出賞心悅目的操作界面。
1.窗體以當(dāng)前屏幕分辨率全屏顯示
在應(yīng)用程序的編制調(diào)試過程中,用于經(jīng)常用到菜單、工具條和工具框等輔助工具,一般不將窗體設(shè)為全屏顯示,以便于操作;另外,當(dāng)屏幕分辨率改變時(shí),窗體可能不能正常顯示,可以在窗體的load事件中插入下列代碼,即可使窗體啟動(dòng)時(shí)以當(dāng)前屏幕分辨率全屏顯示:
private sub form_load()
form1.top=0 ‘設(shè)置窗體上邊界位置
form1.left=0 ‘設(shè)置窗體左邊界位置
form1.width=screen.width ‘設(shè)置窗體寬度為屏幕寬度
form1.height=screen.height ‘設(shè)置窗體高度為屏幕高度
end sub
2.使窗體保持在最上層
有時(shí)應(yīng)用程序需要一個(gè)信息或查詢窗體總保持在最上層,即使用讀書切換到其他窗體也能看到該窗體,如microsoft word中的find窗體,這是通過調(diào)用windows api函數(shù)setwindowpos()實(shí)現(xiàn)的,示例如下:
option explicit
private declare function setwindowpos lib“user32”(byvalhwnd as long,byval h wndinsertafter 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
retvalue=setwindowpos(me.hwnd,hwnd_topmost,me.currentx,me.currenty,300,300,swp_showwindow)
end sub
3.窗體裝入速度慢的處理技巧
在缺省情況下,visual basic裝入和顯示項(xiàng)目的第一個(gè)窗體。如果窗體裝入過程超過一秒,用戶只好耐心等待,特別是在窗體中含有大型位圖或許多控件時(shí)。其實(shí),微軟在office組件中已經(jīng)很好地處理了這一問題。下面的程序演示了處理低速窗體的裝入技巧,在應(yīng)用程序啟動(dòng)時(shí),首先啟動(dòng)一個(gè)簡(jiǎn)單的快速裝入窗體,可以將公司標(biāo)志或其他信息顯示在上面,然后在快速窗體后臺(tái)中裝入慢速窗體,慢速窗體裝入后將快速窗體卸出,從而解決了讓用戶厭煩的等待問題。
private sub form_load()
form1.show
form1.refresh
load form2 ‘裝入慢速窗體
form2.show ‘顯示慢速窗體
end sub
如果省略form1.show方法,則需裝入慢速窗體后才能顯示信息窗體。refresh方法讓visual basic更新顯示后再執(zhí)行后面的命令,缺省情況下,visual basic只在不執(zhí)行其他代碼時(shí),才有機(jī)會(huì)刷新顯示。慢速窗體form2裝入后,用下列代碼將快速窗體fomr1卸出:
private sub form_load()
unload form1 ‘卸出快速窗體
end sub
一旦裝入窗體,它就占用了所要的資源,所以不再需要的窗體應(yīng)及時(shí)卸出,將占用的資源交還系統(tǒng)。另外,由于窗體裝入比較慢,特別是包含位圖或其他資源的大文件裝入更慢,所以應(yīng)用程序運(yùn)行期間應(yīng)盡量避免頻繁裝入/卸出窗體,而最好在應(yīng)用程序啟動(dòng)時(shí)把窗體裝入內(nèi)存,需要時(shí)再顯示。
利用vb控制窗口顯示風(fēng)格
廣州 郭少越
軟件界面生動(dòng)與否很大程度上決定于你對(duì)窗口的設(shè)計(jì)和控制。事實(shí)上,windows程序員可以對(duì)系統(tǒng)中的任何窗口進(jìn)行操縱,它意味著,windows程序員可以直接操縱任何正在運(yùn)行的應(yīng)用窗口;可以發(fā)現(xiàn)一個(gè)特定的應(yīng)用是否在運(yùn)行,如果該應(yīng)用沒有運(yùn)行還可以啟動(dòng)它;可以重新排列屏幕上的所有窗口;還可以使其他應(yīng)用的窗口最大化或最小化。下面我們探討一種十分有意義的應(yīng)用。
我們很希望在程序激活其它窗口時(shí)仍使得封面窗口處于前臺(tái),也就是說該窗口具有“ 總在最前面”(“always on top”)這一特性。其實(shí)microsoft系列軟件都是這樣做的,當(dāng)你運(yùn)行word、excel或powerpoint時(shí),你會(huì)發(fā)現(xiàn)它們的封面窗口不隨系統(tǒng)激活其它窗口而消失。
visual basic for windows(以下簡(jiǎn)稱vb)作為一種可視化編程軟件,以其優(yōu)秀的圖形化界面設(shè)計(jì)風(fēng)格而著稱。利用它可使軟件開發(fā)周期大為縮短,然而vb對(duì)windows dll(動(dòng)態(tài)鏈接庫)調(diào)用的強(qiáng)大功能卻易受不少程序員所忽略。事實(shí)上,靈活應(yīng)用windows dll的api(應(yīng)用程序接口)才能使你開發(fā)的系統(tǒng)更加充滿活力。正是由于vb支持dll使得我們可以隨心所欲地控制窗口顯示風(fēng)格,從而我們可以讓系統(tǒng)封面總處于前臺(tái),下面說明用到的api函數(shù)。
.setwindowpos
vb定義:
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)
說明:能改變窗口的位置和大小,并能修改窗口在內(nèi)部窗口列表中所處的位置,
以控制顯示次序。
參數(shù) 類型/說明
hwnd integer-需定位的窗口
hwndinsertafter integer-窗口句柄,在窗口列表里,
窗口hwnd將放在該窗口句柄的后面,它可以取以下值:
hwnd_bottom:把窗口放在窗口列表的底部;
hwnd-top:把窗口放在z序的頂部。z序是窗口按層次級(jí)別顯示的順序;
hwnd_top(most):把窗口放在列表的頂部,位于所有最頂窗口之后。
x integer—窗口新的x坐標(biāo),如果hwnd是一個(gè)子窗口,x給出的是父窗口的客戶坐標(biāo)。
y integer—窗口新的y坐標(biāo),如果hwnd是一個(gè)子窗口,y給出的是父窗口的客戶坐標(biāo)。
cx integer—指定新窗口寬度。
cy integer—指定新窗口高度。
wflags integer—包含下列標(biāo)志之一的整數(shù):
swp_drawframe:圍繞窗口畫一個(gè)邊框;
swp_h(yuǎn)idewindow:隱藏該窗口;
swp_noactivate:不激活該窗口;
swp_nomove:保持當(dāng)前位置(x和y被忽略);
swp_noredraw:窗口不自動(dòng)重畫;
swp_nosize:保持當(dāng)前大小(cx和cy被忽略);
swp_nozorder:保持窗口列表中的當(dāng)前位置(hwndinsertafter被忽略);
swp_showwindow:顯示該窗口。
注釋:當(dāng)一個(gè)窗口成為最頂窗口時(shí),它所有的從屬窗口也成為最頂窗口;當(dāng)它成為非最頂窗口時(shí),它全部的從屬窗口和擁有窗口也成為非最頂窗口,z序表示窗口沿著從屏幕里向外延伸的假想z軸,從頂?shù)降椎呐帕写涡颉?br>vb實(shí)現(xiàn)窗口擁有“always on top”特性:
首先,定義全局常量及函數(shù)。
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'使鼠標(biāo)變?yōu)槁┒窢?br>load systemcover'裝載系統(tǒng)封面窗體
setwindowpos systemcover.hwnd,hwnd_topmost,0,0,0,0,swp_noactivate or swp_showwindow'使得封面總處于最前面
load initwindow1'裝載初始化窗體1
load initwindow2'裝載初始化窗體2
:
:
unload systemcover'關(guān)閉系統(tǒng)封面窗體
screen.mousepointer=0
'使鼠標(biāo)變?yōu)槿笔⌒螤?br>end sub
讓窗口一直在上面
很多流行軟件都有這樣一個(gè)選項(xiàng):always on top。它可以讓窗口在最上面,別的窗口不能覆蓋它。我們?cè)?vb 中,可以使用下面的方法來實(shí)現(xiàn):
private const swp_nosize = &h1
private const swp_nomove = &h2
private const swp_nozorder = &h4
private const swp_noredraw = &h8
private const swp_noactivate = &h10
private const swp_framechanged = &h20
private const swp_showwindow = &h40
private const swp_nocopybits = &h80
private const swp_noownerzorder = &h200
private const swp_drawframe = swp_framechanged
private const swp_noreposition = swp_noownerzorder
private const hwnd_top = 0
private const hwnd_bottom = 1
private const hwnd_topmost = -1
private const hwnd_notopmost = -2
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
private mbontop as boolean
private property let ontop (setting as boolean)
if setting then
setwindowpos hwnd, -1, 0, 0, 0, 0, swp_nomove or swp_nosize
else
setwindowpos hwnd, -2, 0, 0, 0, 0, swp_nomove or swp_nosize
end if
mbontop = setting
end property
private property get ontop() as boolean
'return the private variable set in property let
ontop = mbontop
end property
調(diào)用 ontop=true 即可讓窗口 always on top。
創(chuàng)建無 icon 的窗口
我們?cè)诤芏鄷r(shí)候都需要那種無 icon 的 窗口,如“關(guān)于……”“查找”等。在 vb 中,我們可以按以下步驟來創(chuàng)建此類窗口:
1、設(shè)置窗口的 borderstyle = 3;
2、在 form_load 中加入:me.icon = loadpicture("")
創(chuàng)建不規(guī)則窗口
win32 api 有很多讓你意想不到的功能。要?jiǎng)?chuàng)建特殊的不規(guī)則窗口看上去似乎很難。但我們?nèi)绻覀冋f我們用幾行代碼就可以實(shí)現(xiàn),這似乎不可思議。但事實(shí)就是如此!請(qǐng)?jiān)囋嚕?br>private declare function createellipticrgn lib "gdi32" (byval x1 as long, byval y1 as long, byval x2 as long, byval y2 as long) as long
private declare function setwindowrgn lib "user32" (byval hwnd as long, byval hrgn as long, byval bredraw as boolean) as long
private sub form_load()
show 'the form!
setwindowrgn hwnd, createellipticrgn(0, 0, 300, 200), true
end sub
上述代碼可以創(chuàng)建一個(gè)橢圓形狀的窗口。怎么樣??
用vb5.0獲取正在系統(tǒng)中運(yùn)行的窗口標(biāo)題
山東德州 胥智強(qiáng)
熟悉visual basic的讀者都知道,appactivate語句是激活一個(gè)應(yīng)用程序窗口其后所帶的參數(shù)是指要被子激活的應(yīng)用程序窗口標(biāo)題條的字符串。如果要激活的是一個(gè)常見的應(yīng)用程序,我們?cè)诰帉懗绦驎r(shí)就可以直接寫上此程序的窗口標(biāo)題。例如,我們想激活windows95的計(jì)算器,可先運(yùn)行程序x=shell("calc.exe",1),然后再激活計(jì)算器窗口appactivate“計(jì)算器”,則程序焦點(diǎn)自動(dòng)轉(zhuǎn)到計(jì)算器窗口上。然而單純使用該方法局限性非常大,比如上述例子,如果我們放在英文windows95上運(yùn)行,計(jì)算器的窗口標(biāo)題就不是“計(jì)算器”,而是“calculator”。再一個(gè)局限性就是在很多情況下我們并不知道要激活的程序窗口標(biāo)題名稱,如何編制一個(gè)能自動(dòng)查找程序窗口標(biāo)題名稱的程序是本文要解決的問題。
我們可以采取如下辦法,來獲取正在系統(tǒng)運(yùn)行的窗口標(biāo)題。
在windowsapi中有一個(gè)函數(shù):
get windows (byval hwnd as long ,byval wcmd as long) as long
其中,hwnd是當(dāng)前窗口句柄,wcmd是與hwnd有聯(lián)系的常量,其含義如下:
wcmd值
含義
gw-ghild
第一個(gè)子窗口
gw-hwndfirst
子窗口的第一兄弟窗口,其第一個(gè)頂層窗口
gw-hwndlast
子窗口的最后一個(gè)兄弟窗口,或最后一個(gè)頂層窗口
gw-hwndnext
后繼窗口
gw-hwndprcv
先前窗口
gw-owner
窗口擁有者
此函數(shù)返回值是wcmd所指的窗口的句柄。
我們利用此句柄 ,再用函數(shù)get windowstext (byval hwnd as long ,byval ipstring as string, byval cch as long) as long,將句柄hwnd指定的窗口標(biāo)題放入一個(gè)字符串變量ipstring中,cch是指放入ipstring中的最大字符數(shù)。此函數(shù)成功時(shí)返回字符串長(zhǎng)度,如果窗口無標(biāo)題則返回零。
在使用get windowstext函數(shù)前,還要先用函數(shù)get windowstextlength (byval hwnd as long )as long得到hwnd指定窗口標(biāo)題的長(zhǎng)度,放入cch中。
自編一個(gè)過程findtitle()查找系統(tǒng)中正在運(yùn)行的所有標(biāo)題,首先獲得第一個(gè)頂層窗口句柄currwnd,而后采用while…wend循環(huán)結(jié)構(gòu),當(dāng)currwnd不為零而且標(biāo)題文本長(zhǎng)度不為零時(shí),將獲得的標(biāo)題存入列表框combo1,再找后繼窗口的句柄,當(dāng)句柄currwnd=0時(shí)表示已沒有了后繼窗口,退出循環(huán)。這樣就將系統(tǒng)中所有的窗口句柄及標(biāo)題找出來了。
然而調(diào)試中發(fā)現(xiàn)用此方法找到的窗口標(biāo)題非常多,這說明windows系統(tǒng)運(yùn)行時(shí)有許多隱含的窗口,而這些窗口是我們所不需要的,而且用appactivate激活時(shí)也出現(xiàn)錯(cuò)誤。
因此我們?cè)僮跃幰粋€(gè)過程sift ()查找可激活的窗口。其方法是用appactivate逐個(gè)激活所有窗口,出現(xiàn)錯(cuò)誤的丟掉,保留可激活的窗口標(biāo)題,放入列表框combo2。
首先新建窗體form1,caption=“獲取窗口標(biāo)題”,在窗體form1上建立兩個(gè)標(biāo)簽,label1,caption=“所有窗口標(biāo)題”,label2.caption=“可激活的窗口標(biāo)題”;建立兩個(gè)下拉列表框,combo1存放系統(tǒng)中的所有標(biāo)題名稱,combo2存放可激活的標(biāo)題名稱;再建立兩個(gè)命令按鈕,command1.caption=“激活窗體”,可對(duì)所列窗體進(jìn)行測(cè)試,命令按鈕command2.caption=“刷新”,點(diǎn)擊它可重新查找所有在系統(tǒng)中的窗體名稱,當(dāng)本程序運(yùn)行以后又運(yùn)行了新程序時(shí)使用此按鈕。
從vb系統(tǒng)菜單上選取project中的add module,將下述api函數(shù)及一些常量錄入。
'module 模塊
declare function getwindow lib "user32"(byval hwnd as long, byval wcmd as long)as long
declare function getwindowtext lib "user32" aias"getwindowtexta" (byval hwnd as long, byval lpstring as string,byval cch as long)as long
declare function getwindowtext length lib "user32" aias"getwindowtextlengtha" (byval hwnd as long)as long
public const gw-hwndfirst=0
public const gw-hwndlast=1
public const gw-hwndnext=2
public const gw-hwndprev=3
public const gw-owner=4
建立兩個(gè)子程序:
sub findtitle ()
'查找桌面上的所有窗口標(biāo)題
dim currwnd as integer
combo1.clear
currwnd=getwindow (hwnd, gw-hwndfirst)
while currwnd<>0
length= getwindow textlength (currwnd)
listitem$=space $(length +1)
length= getwindow text (currwnd,listitem$,length+1)
if length>0 then
combo1.addltem listitem $
end if
currwnd= getwindow (currwnd, gw-hwndnext)
if combl1.listcount>0 then
combo1.text=combol.list (0)
combo1.listindex =0
else
msgbox“沒有發(fā)現(xiàn)可活動(dòng)的窗口”,16,“活動(dòng)”
end if
wend
end sub
sub sift ()
'測(cè)試窗口能否活動(dòng)
i=0
combo2.clear
do
on local error resume next
appactivate combo1.list (i)
if err =0 then
combo2.additem combo1.list(i)
end if
i=i+1
loop unti 1 i=combo1.listcount-1
appactivate form1.caption
if combo2.listcount>0 then
combo2.text =combo2.list (0)
combo2.listindex =0
else
msgbox “沒有發(fā)現(xiàn)可活動(dòng)窗口”,16,“活動(dòng)”
end if
end sub
private sub form-load ()
form1.show'首先將本窗體顯示出來,否則查找出的窗體標(biāo)題沒有本身
msgbox "開始查找窗口標(biāo)題"
call findtitle
call sift
end sub
private sub command1-click ()
f $=combo2.text
on local error resume next
appactivate f $
end sub
private sub command2-click ()
call findtitle
call sift
end sub
本程序在visual basic5.0上調(diào)試通過。
利用form_queryunload詢問使用者是否關(guān)閉窗口
如 何 在 窗 口 關(guān) 閉 時(shí) , 詢 問 使 用 者 是 否 確 定 關(guān) 閉 , 若 否, 則 取 消 關(guān) 閉 動(dòng) 作 , 若 是 則 結(jié) 束 程 序 !
這 是 一 個(gè) 很 重 要 的 問 題 , 想 想 , 如 果 還 有 編 輯 中 的 檔案 尚 未 存 檔 , 但 一 時(shí) 忘 了 按 下 「 關(guān) 機(jī) 」 鈕 , 那 么 編 輯 中的 文 件 難 道 就 不 存 檔 了 嗎 ? 為 了 避 免 這 種 事 情 的 發(fā) 生 , windows 在 關(guān) 機(jī) 以 前 會(huì) 徵 詢 每 一 個(gè) 窗 口 是 否 同 意 關(guān) 機(jī) , 而對(duì) vb 程 序 而 言 , 所 收 到 「 徵 詢 同 意 關(guān) 機(jī) 」 的 事 件 是 form_queryunload,如 果 程 序 不 同 意 關(guān) 機(jī) , 可 以 將 叁 數(shù) 中 的 cancel 設(shè) 定 為 true,如 下 :
private sub form_queryunload(cancel as integer, unloadmode as integer)
cancel = true
end sub
則 windows 便 會(huì) 終 止 關(guān) 機(jī) 的 動(dòng) 作 。 只 有 在 所 有 窗 口 都 同意 關(guān) 機(jī) 的 情 況 下 , windows 才 會(huì) 真 的 關(guān) 機(jī) 。
如 何將「拒 絕 被 蓋 住 的 窗 口 」還 原
如 果 form 已 執(zhí) 行 過 拒 絕 被 蓋 住 的 窗 口 功 能, 應(yīng) 如 何 將 它 恢 復(fù) 成 正 常 的 form ?
拒絕被蓋住 ret = setwindowpos(me.hwnd, -1, 0, 0, 0, 0, 3)
恢復(fù)正常 ret = setwindowpos(me.hwnd, -2, 0, 0, 0, 0, 3)