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

首頁 > 開發 > 綜合 > 正文

用C#實現在客戶區拖動窗體

2024-07-21 02:18:34
字體:
來源:轉載
供稿:網友
當你設計一個應用程序時,或許你希望用戶能夠通過客戶區來拖動窗體,比如:當窗體沒有標題欄或創建的是不規則的窗體時,就只有通過客戶區來拖動窗體了。

一個發生在我們身邊很好的例子就是microsoft windows media player。media player有項功能是根據用戶的愛好可以隨意換掉外觀(換膚),這個時候標題欄就隱藏了,但是你能夠通過客戶區來拖動窗體。

好了,言歸正傳,開始我們的旅程吧

首先必須了解windows的消息傳遞機制,當有鼠標活動消息時,系統發送wm_nchittest 消息給窗體作為判斷消息發生地的根據。假如你點擊的是標題欄,窗體收到的消息值就是 htcaption ,同樣地,若接受到的消息是 htclient,說明用戶點擊的是客戶區,也就是鼠標消息發生在客戶區。

當重載窗體的 wndproc 方法時,可以截獲 wm_nchittest 消息并改些該消息,當判斷鼠標事件發生在客戶區時,改寫改消息,發送 htcaption 給窗體,這樣,窗體收到的消息就時 htcaption ,在客戶區通過鼠標來拖動窗體就如同通過標題欄來拖動一樣。

注意:當你重載 wndproc 并改寫鼠標事件后,整個窗體的鼠標事件也就隨之改變了。


例子:
1.創建一個c#工程文件,默認的窗體時form1 。

2.在view面板上點擊code.

3.將下面的代碼粘貼到form1類中

private const int wm_nchittest = 0x84;
private const int htclient = 0x1;
private const int htcaption = 0x2;

4.在form1中改寫鼠標消息

protected override void wndproc(ref message m)
{
switch(m.msg)
{
case wm_nchittest:
base.wndproc(ref m);
if ((int)m.result == htclient)
m.result = (intptr)htcaption;
return;
break;
}
base.wndproc(ref m);
}

5.保存并運行工程。

6.試試看,點擊窗體的任何地方,是不是都可以拖動窗體啊?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桃园县| 曲麻莱县| 怀仁县| 轮台县| 阿图什市| 鲁甸县| 巴东县| 德州市| 广元市| 城口县| 即墨市| 台中市| 钦州市| 淳化县| 都兰县| 广东省| 长宁区| 陆川县| 湖州市| 驻马店市| 武宣县| 卫辉市| 寿光市| 河东区| 千阳县| 泗洪县| 都兰县| 长子县| 高陵县| 洪洞县| 封开县| 武清区| 庆安县| 睢宁县| 龙南县| 南漳县| 苍山县| 吉安市| 彩票| 临邑县| 香港 |