更換VB.NET窗體標題欄的方法
#t#VB.NET經過長時間的發(fā)展,很多用戶都很了解VB.NET窗體標題欄了,這里我發(fā)表一下個人理解,和大家討論討論。VB.NET做為VB6的升級版本,具備了許多新的功能,它可以簡便快捷地創(chuàng)建 .NET 應用程序(包括 XML Web services 和 ASP.NET Web 應用程序),還是一個功能強大的面向對象的編程語言(如繼承、接口和重載)。新的語言功能包括自由線程處理和結構化異常處理。VB.NET 還完全集成了.NET 框架和公共語言運行庫,.NET 框架和公共語言運行庫共同提供語言互操作性、垃圾回收、增強的安全性和改進的版本支持??梢哉f是一個劃時代的產品!
無標題欄的窗體的拖動問題,在特殊窗體的應用中,我們有時需要把VB.NET窗體標題欄屏蔽掉,以窗體換上自己的外殼。是,當去掉了VB.NET窗體標題欄后,移動窗體就成了一個問題。我們還是來看一下在VB6中的實現,VB6中實現(借助API函數SendMessage)在設計時將窗體的BorderStyle屬性設置為0-none
- PrivateDeclareFunction SendMessage Lib "User32" Alias "SendMessageA"
(ByVal hWnd AsLong, ByVal wMsg AsLong, ByVal wParam AsLong, ByVal lParam As Any) AsLong- PrivateDeclareSub ReleaseCapture Lib "User32" ()
- Const WM_NCLBUTTONDOWN = &HA1
- Const HTCAPTION = 2
- Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
- Dim lngReturnValue AsLong
- If Button = 1 Then
- 'Release capture
- Call ReleaseCapture()
- 'Send a 'left mouse button down on caption'-message to our form
- lngReturnValue = SendMessage(Me.hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
- EndIf
- EndSub
- PrivateSub Form_Paint()
- Me.Print("Click on the form, hold the mouse button and drag it")
- EndSub
在VB.NET窗體標題欄中,這次需要借助API SendMessage了,在設計時將Form.FormBorderStyle 屬性設置為None,然后添加以下代碼:
- DeclareFunction SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd AsInteger, ByVal wMsg AsInteger, ByVal wParam AsInteger,
ByVal lParam AsInteger) AsInteger- PrivateDeclareSub ReleaseCapture Lib "User32" ()
- Const WM_NCLBUTTONDOWN = &HA1
- Const HTCAPTION = 2
- PrivateSub Form1_MouseDown(ByVal sender AsObject,
ByVal e As System.Windows.Forms.MouseEventArgs) HandlesMyBase.MouseDown- ReleaseCapture()
- SendMessage(Me.Handle.ToInt64, WM_NCLBUTTONDOWN, HTCAPTION, 0)
- EndSub


















