窗體遷移大法
原文:http://develop.csai.cn/dotnet/200702141004021694.htm
窗體遷移大法
有很多軟體為了實現特殊的顯示效果,採用非矩形的窗體,而這些窗體往往沒有標題欄。想要移動一個沒有標題欄的視窗是不那麼容易的。下面我介紹兩種在VB中採取不同原理的方法移動一個沒有標題欄的視窗。
方法一
這種方法是在窗體的MouseDown、MouseUp和MouseMove等事件的處理過程中新增程式碼,實現在滑鼠左鍵按下後移動時,改變窗體的Left和Top屬性,實現移動無標題欄的窗體。
進入VB,把窗體Form1的BorderStyle屬性設定為0-None(無標題欄),再窗體上新增一個ButtonCommand元件,用來關閉程式。程式碼如下:
PrivateTypePOINT
XAsSingle
YAsSingle
EndType
DimFormPAsPOINT
'記錄窗體原始位置
DimMousePAsPOINT
'記錄滑鼠按下時的位置
DimMouseLButtonDownAsBoolean
'記錄滑鼠左鍵是否按下
PrivateSubCommand1_Click()
End'退出程式
EndSub
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
FormP.X=Form1.Left
'記下窗體原始座標位置
FormP.Y=Form1.Top
MouseP.X=X
'記下滑鼠按下時的位置
MouseP.Y=Y
IfButton=1Then
MouseLButtonDown=True
'滑鼠左鍵按下
EndIf
EndSub
PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfMouseLButtonDownThen
Form1.Left=FormP.X (X-MouseP.X)'移動窗體
Form1.Top=FormP.Y (Y-MouseP.Y)
EndIf
EndSub
PrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
MouseLButtonDown=False
'滑鼠左鍵彈起
EndSub
上述方法不是很完善,製作出的窗體被拖動時,窗體會隨滑鼠的移動而移動。而在預設的設定中拖動窗體時,被拖動的窗體不會隨窗體的移動而移動,隨窗體移動的僅是一個與窗體形狀、大小一樣的虛框,只有釋放滑鼠後,窗體才會移動到釋放滑鼠時虛框的所在處。要實現這種效果,請看第二種方法。
方法二
這種方法透過訊息的傳送實現移動無標題窗體。當滑鼠按下、移動或釋放時,將滑鼠在窗體上按下的訊息(訊息值為HTCAPTION)發出,就可以拖動窗體了。程式碼如下:
PrivateDeclareFunctionReleaseCaptureLib"user32"()AsLong
PrivateDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAsLong,
ByValwMsgAsLong,ByValwParamAsLong,lParamAsAny)AsLong
PrivateConstWM_NCLBUTTONDOWN=&&HA1
PrivateConstHTCAPTION=2
'以上API函式和常數的宣告可在VB自帶的“API瀏覽器”中找到
PrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
'在窗體的MouseDown事件中新增以下程式碼
IfButton=1Then
CallReleaseCapture
CallSendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0)
EndIf
EndSub
PrivateSubCommand1_Click()
End '退出程式
EndSub
這種方法實現起來比第一種方法更容易,只有幾行程式碼,並且沒有那麼多的變數,窗體被拖動時與普通窗體一樣,只有一個虛框隨滑鼠的移動而移動,當釋放滑鼠時窗體才移動到相應的位置。用到了兩個API函式。
以上程式在VB6.0和Windows98SE下除錯透過。
[@more@]有很多軟體為了實現特殊的顯示效果,採用非矩形的窗體,而這些窗體往往沒有標題欄。想要移動一個沒有標題欄的視窗是不那麼容易的。下面我介紹兩種在VB中採取不同原理的方法移動一個沒有標題欄的視窗。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8072212/viewspace-899694/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Git 倉庫的整體遷移Git
- 伺服器資料遷移的方法-硬體不同如何遷移資料伺服器
- KVM線上遷移(動態遷移)
- 移動沒有CAPTION的窗體 (轉)APT
- 【遷移】使用rman遷移資料庫資料庫
- WPF中webview2滑鼠移動窗體WebView
- 遷移公告
- CCU遷移
- 棧遷移
- 單體JOB向分散式JOB遷移案例分散式
- 【遷移】SqlServer 遷移到 MySQL 方法ServerMySql
- Azure ASM到ARM遷移 (三) Reserved IP的遷移ASM
- 遷移案例一: oracle 8i 檔案遷移Oracle
- 查詢行遷移及消除行遷移(chained rows)AI
- 脫殼後軟體減肥大法
- SQLSERVER遷移資料至ORACLE軟體下載SQLServerOracle
- linux記憶體管理(十一)- 頁面遷移Linux記憶體
- 賬號遷移
- docker映象遷移Docker
- Redis鍵遷移Redis
- 戶口遷移
- 部落格遷移
- 遷移資料.
- blog遷移
- 空間遷移
- 【資料遷移】RMAN遷移資料庫到ASM(三)遷移onlinelog等到ASM資料庫ASM
- [論文閱讀] 顏色遷移-N維pdf遷移
- ZT 遷移案例一: oracle 8i 檔案遷移Oracle
- weblogic中介軟體版本遷移常見問題Web
- 【資料遷移】使用傳輸表空間遷移資料
- Oracle遷移文章大全Oracle
- 遷移ASM磁碟組ASM
- 線上redis遷移思路Redis
- Kafka資料遷移Kafka
- Codable 的遷移方案
- webpack 4遷移指南Web
- cloudera manager server遷移CloudServer
- Jenkins Job遷移Jenkins