MFC对话框禁止移动 使标题栏不响应鼠标消息 通过客户区移动窗体 OnNcHitTest()的实现...

xiaoxiao2021-03-01  10

//这个函数允许我们对 windows鼠标消息进行处理 对于基类函数的返回值 我们可以通过判断消息类型来进行不同的处理 //也就是说 我们可以对鼠标消息做任意处理 比如 是菜单栏上的消息 我们可以返回标题栏的值 //对应的消息类型有如下 查找MSDN此函数的 值有介绍 UINT CMyDlg::OnNcHitTest(CPoint point) {

UINT nFlags= CDialog::OnNcHitTest(point); //调用基类的OnNcHitTest获得返回值 if(nFlags==HTCAPTION||nFlags==HTSYSMENU) //如果鼠标消息是在 标题栏上或者系统菜单栏 我们就返回FALSE 不进行处理 { return FALSE ; } else if(nFlags==HTCLIENT) //可以通过客户区域移动窗体但是不能通过标题栏移动 return HTCAPTION ; else return nFlags;

}

下面是一些测试枚举值

::OnNcHitTest

  afx_msg UINT OnNcHitTest( CPoint point );   返回值:下面列出的鼠标击中测试枚举值之一。   · HTBORDER 在不具有可变大小边框的窗口的边框上。   · HTBOTTOM 在窗口的水平边框的底部。   · HTBOTTOMLEFT 在窗口边框的左下角。   · HTBOTTOMRIGHT 在窗口边框的右下角。   · HTCAPTION 在标题条中。   · HTCLIENT 在客户区中。   · HTERROR 在屏幕背景或窗口之间的分隔线上(与HTNOWHERE相同,除了Windows的DefWndProc函数产生一个系统响声以指明错误)。   · HTGROWBOX 在尺寸框中。   · HTHSCROLL 在水平滚动条上。   · HTLEFT 在窗口的左边框上。   · HTMAXBUTTON 在最大化按钮上。   · HTMENU 在菜单区域。   · HTMINBUTTON 在最小化按钮上。   · HTNOWHERE 在屏幕背景或窗口之间的分隔线上。   · HTREDUCE 在最小化按钮上。   · HTRIGHT 在窗口的右边框上。   · HTSIZE 在尺寸框中。(与HTGROWBOX相同)   · HTSYSMENU 在控制菜单或子窗口的关闭按钮上。   · HTTOP 在窗口水平边框的上方。   · HTTOPLEFT 在窗口边框的左上角。   · HTTOPRIGHT 在窗口边框的右上角。   · HTTRANSPARENT 在一个被其它窗口覆盖的窗口中。   · HTVSCROLL 在垂直滚动条中。   · HTZOOM 在最大化按钮上。
转载请注明原文地址: https://www.6miu.com/read-3850326.html

最新回复(0)