窗體遷移大法

zz00發表於2007-02-15

原文:http://develop.csai.cn/dotnet/200702141004021694.htm

窗體遷移大法

有很多軟體為了實現特殊的顯示效果,採用非矩形的窗體,而這些窗體往往沒有標題欄。想要移動一個沒有標題欄的視窗是不那麼容易的。下面我介紹兩種在VB中採取不同原理的方法移動一個沒有標題欄的視窗。

方法一

這種方法是在窗體的MouseDownMouseUpMouseMove等事件的處理過程中新增程式碼,實現在滑鼠左鍵按下後移動時,改變窗體的LeftTop屬性,實現移動無標題欄的窗體。

進入VB,把窗體Form1BorderStyle屬性設定為0-None(無標題欄),再窗體上新增一個ButtonCommand元件,用來關閉程式。程式碼如下:

PrivateTypePOINT

XAsSingle

YAsSingle

EndType

DimFormPAsPOINT

'記錄窗體原始位置

DimMousePAsPOINT

'記錄滑鼠按下時的位置

DimMouseLButtonDownAsBoolean

'記錄滑鼠左鍵是否按下

PrivateSubCommand1_Click()

End'退出程式

EndSub

PrivateSubForm_MouseDown(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

FormP.X=Form1.Left

'記下窗體原始座標位置

FormP.Y=Form1.Top

MouseP.X=X

'記下滑鼠按下時的位置

MouseP.Y=Y

IfButton=1Then

MouseLButtonDown=True

'滑鼠左鍵按下

EndIf

EndSub

PrivateSubForm_MouseMove(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

IfMouseLButtonDownThen

Form1.Left=FormP.X (X-MouseP.X)'移動窗體

Form1.Top=FormP.Y (Y-MouseP.Y)

EndIf

EndSub

PrivateSubForm_MouseUp(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

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.0Windows98SE下除錯透過。

[@more@]

有很多軟體為了實現特殊的顯示效果,採用非矩形的窗體,而這些窗體往往沒有標題欄。想要移動一個沒有標題欄的視窗是不那麼容易的。下面我介紹兩種在VB中採取不同原理的方法移動一個沒有標題欄的視窗。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8072212/viewspace-899694/,如需轉載,請註明出處,否則將追究法律責任。

相關文章