VC++ 鼠标非显示区域命中测试消息WM_NCHITTEST和相关编程问题学习1
此消息代表非顯示區(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)題。
- 上一篇: 初步了解Telerik for WPF
- 下一篇: VC++图片框控件静态和动态加载位图