国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

窗體遷移大法

2019-11-18 17:55:30
字體:
來源:轉載
供稿:網友
有很多軟件為了實現特殊的顯示效果,采用非矩形的窗體,而這些窗體往往沒有標題欄。想要移動一個沒有標題欄的窗口是不那么容易的。下面我介紹兩種在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

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


  方法二

  這種方法通過消息的發送實現移動無標題窗體。當鼠標按下、移動或釋放時,將鼠標在窗體上按下的消息(消息值為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下調試通過。

->


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 咸丰县| 通城县| 景洪市| 和静县| 高台县| 隆德县| 磐石市| 沾益县| 黔东| 常州市| 肇庆市| 鄂温| 小金县| 芜湖县| 蒲江县| 资讯 | 万载县| 邹城市| 灵武市| 杭锦后旗| 内乡县| 宣汉县| 武汉市| 龙川县| 龙海市| 吴川市| 榆中县| 吴堡县| 宜川县| 衡水市| 梁山县| 东乡族自治县| 白银市| 邯郸市| 宣武区| 阿克陶县| 宁强县| 台中市| 仙居县| 原阳县| 柳林县|