国产探花免费观看_亚洲丰满少妇自慰呻吟_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.試試看,點擊窗體的任何地方,是不是都可以拖動窗體啊?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿拉善盟| 嘉义市| 廉江市| 芦山县| 苍溪县| 花莲县| 宜兰县| 宜章县| 宣武区| 木兰县| 安乡县| 息烽县| 皮山县| 游戏| 宿州市| 南陵县| 福安市| 合山市| 彩票| 新化县| 东丰县| 德昌县| 苏尼特右旗| 比如县| 正镶白旗| 于田县| 沿河| 和平县| 丹棱县| 镇赉县| 门头沟区| 延津县| 沂水县| 道孚县| 镇原县| 会理县| 宕昌县| 东丰县| 信丰县| 贵州省| 瓮安县|