日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

VC++ 鼠标非显示区域命中测试消息WM_NCHITTEST和相关编程问题学习1

發(fā)布時(shí)間:2025/4/14 c/c++ 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++ 鼠标非显示区域命中测试消息WM_NCHITTEST和相关编程问题学习1 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

此消息代表非顯示區(qū)域命中測(cè)試;非顯示區(qū)域,應(yīng)該指窗口客戶區(qū)以外的區(qū)域;
這個(gè)消息優(yōu)先于所有其他的顯示區(qū)域和非顯示區(qū)域鼠標(biāo)消息;其中l(wèi)Param參數(shù)含有鼠標(biāo)位置的x和y屏幕坐標(biāo),wParam 這里沒(méi)有用;

消息的返回值:
? ? 下面列出的鼠標(biāo)擊中測(cè)試枚舉值之一; 

HTBORDER 在不具有可變大小邊框的窗口的邊框上。 
HTBOTTOM 在窗口的水平邊框的底部?!?br /> HTBOTTOMLEFT 在窗口邊框的左下角?! ?br /> HTBOTTOMRIGHT 在窗口邊框的右下角。  
HTCAPTION 在標(biāo)題條中?! ?br /> HTCLIENT 在客戶區(qū)中?! ?br /> HTERROR 在屏幕背景或窗口之間的分隔線上(與HTNOWHERE相同,除了Windows的DefWndProc函數(shù)產(chǎn)生一個(gè)系統(tǒng)響聲以指明錯(cuò)誤)?! ?br /> HTGROWBOX 在尺寸框中?! ?br /> HTHSCROLL 在水平滾動(dòng)條上?! ?br /> HTLEFT 在窗口的左邊框上?! ?br /> HTMAXBUTTON 在最大化按鈕上。  
HTMENU 在菜單區(qū)域?! ?br /> HTMINBUTTON 在最小化按鈕上?! ?br /> HTNOWHERE 在屏幕背景或窗口之間的分隔線上。  
HTREDUCE 在最小化按鈕上?! ?br /> HTRIGHT 在窗口的右邊框上?! ?br /> HTSIZE 在尺寸框中。(與HTGROWBOX相同)  
HTSYSMENU 在控制菜單或子窗口的關(guān)閉按鈕上?! ?br /> HTTOP 在窗口水平邊框的上方。  
HTTOPLEFT 在窗口邊框的左上角?! ?br /> HTTOPRIGHT 在窗口邊框的右上角?! ?br /> HTTRANSPARENT 在一個(gè)被其它窗口覆蓋的窗口中。  
HTVSCROLL 在垂直滾動(dòng)條中?! ?br /> HTZOOM 在最大化按鈕上。

這個(gè)消息的一個(gè)經(jīng)典應(yīng)用是,拖動(dòng)一個(gè)無(wú)標(biāo)題欄的窗體或者說(shuō)我如何實(shí)現(xiàn)在客戶區(qū)也能拖動(dòng)此窗體;
?

win10, VC6;新建一個(gè)對(duì)話框工程,或單文檔工程;代碼為,

UINT CMainFrame::OnNcHitTest(CPoint point) {// TODO: Add your message handler code here and/or call defaultUINT nHitTest = CFrameWnd::OnNcHitTest (point);if (nHitTest == HTCAPTION){AfxMessageBox("鼠標(biāo)在標(biāo)題條中!!!");}//if ((nHitTest == HTCLIENT) && (::GetAsyncKeyState (MK_LBUTTON) < 0))//{// nHitTest = HTCAPTION;//AfxMessageBox("鼠標(biāo)在標(biāo)題條中!!!");//}return CFrameWnd::OnNcHitTest(point); }

如果由對(duì)話框類(lèi)或視圖類(lèi)處理此消息,添加代碼,則出錯(cuò)如下;

也就是只能由主框架類(lèi)處理此消息;代碼如前;

根據(jù)前面此消息的定義,運(yùn)行程序,看鼠標(biāo)放到窗口標(biāo)題條上,是否彈出對(duì)話框;結(jié)果是,沒(méi)反應(yīng);代碼中注釋部分和沒(méi)注釋部分,都是一樣;

下回再整;

如果類(lèi)向?qū)е袥](méi)有出現(xiàn)?WM_NCHITTEST 消息;則做如下選擇;

從代碼來(lái)看,消息響應(yīng)函數(shù)收到的是鼠標(biāo)點(diǎn)坐標(biāo),再通過(guò)點(diǎn)坐標(biāo)調(diào)用?CFrameWnd::OnNcHitTest (point) 獲得鼠標(biāo)位置的枚舉值;

總結(jié)

以上是生活随笔為你收集整理的VC++ 鼠标非显示区域命中测试消息WM_NCHITTEST和相关编程问题学习1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。