熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

窗體遷移大法

2013-11-13 12:17:43  來源: .NET編程 

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

  方法一

  這種方法是在窗體的MouseDownMouseUp和MouseMove等事件的處理過程中添加代碼實現在鼠標左鍵按下後移動時改變窗體的Left和Top屬性實現移動無標題欄的窗體

  進入VB把窗體Form的BorderStyle屬性設置為None(無標題欄)再窗體上添加一個ButtonCommand組件用來關閉程序代碼如下

    PrivateTypePOINT

    XAsSingle

    YAsSingle

    EndType

    DimFormPAsPOINT

    記錄窗體原始位置

    DimMousePAsPOINT

    記錄鼠標按下時的位置

    DimMouseLButtonDownAsBoolean

    記錄鼠標左鍵是否按下

    PrivateSubCommand_Click()

    End退出程序

    EndSub

    PrivateSubForm_MouseDown(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

    FormPX=FormLeft

    記下窗體原始坐標位置

    FormPY=FormTop

    MousePX=X

    記下鼠標按下時的位置

    MousePY=Y

    IfButton=Then

    MouseLButtonDown=True

    鼠標左鍵按下

    EndIf

    EndSub

    PrivateSubForm_MouseMove(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

    IfMouseLButtonDownThen

    FormLeft=FormPX (XMousePX)移動窗體

    FormTop=FormPY (YMousePY)

    EndIf

    EndSub

    PrivateSubForm_MouseUp(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

    MouseLButtonDown=False

    鼠標左鍵彈起

    EndSub

  上述方法不是很完善制作出的窗體被拖動時窗體會隨鼠標的移動而移動而在默認的Windows設置中拖動窗體時被拖動的窗體不會隨窗體的移動而移動隨窗體移動的僅是一個與窗體形狀大小一樣的虛框只有釋放鼠標後窗體才會移動到釋放鼠標時虛框的所在處要實現這種效果請看第二種方法


  方法二

  這種方法通過消息的發送實現移動無標題窗體當鼠標按下移動或釋放時將鼠標在窗體上按下的消息(消息值為HTCAPTION)發出就可以拖動窗體了代碼如下

    PrivateDeclareFunctionReleaseCaptureLibuser()AsLong

    PrivateDeclareFunctionSendMessageLibuserAliasSendMessageA(ByValhwndAsLong

    ByValwMsgAsLongByValwParamAsLonglParamAsAny)AsLong

    PrivateConstWM_NCLBUTTONDOWN=&&HA

    PrivateConstHTCAPTION=

    以上API函數和常數的聲明可在VB自帶的API浏覽器中找到

    PrivateSubForm_MouseDown(ButtonAsIntegerShiftAsIntegerXAsSingleYAsSingle)

    在窗體的MouseDown事件中添加以下代碼

    IfButton=Then

    CallReleaseCapture

    CallSendMessage(hwndWM_NCLBUTTONDOWNHTCAPTION)

    EndIf

    EndSub

    PrivateSubCommand_Click()

    End   退出程序

    EndSub

    這種方法實現起來比第一種方法更容易只有幾行代碼並且沒有那麼多的變量窗體被拖動時與普通窗體一樣只有一個虛框隨鼠標的移動而移動當釋放鼠標時窗體才移動到相應的位置用到了兩個API函數

  以上程序在VB和WindowsSE下調試通過


From:http://tw.wingwit.com/Article/program/net/201311/15590.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.