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

 

//这个函数允许我们对 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 在最大化按钮上。

时间: 2024-11-03 21:46:15

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

TWebBrower无法响应鼠标消息

问题描述 TWebBrower无法响应鼠标消息 TWebBrower无法响应鼠标消息 sendmessage给窗口一切正常,即使坐标在webbrower上的时候,响应的也是窗口的事件,webbrower无反应. 求助,如何让twebbrower响应鼠标消息 解决方案 可以使用鼠标钩子或者模拟鼠标哦. 解决方案二: 想让程序在后台运行,所以需要用sendmessage或者postmessage,还有没有好的方法?

修改窗体非客户区大小更改窗体标题栏高度

想修改窗体的非客户区,首先就得明白为什么要修改非客户区,什么是非客户区 从窗体或控件来看,非客户区就是无法放置控件的区域,比如窗体的标题栏,和边框,菜单栏也是非客户区,菜单栏不是控件是画上去的 文本框的边框,滚动条区域都是非客户区 为什么要修改非客户区呢?? 原因是为了自绘,让边框好看一些,比如要加高窗体标题栏,就需要改非客户区,自绘非客户区会响应 WM_NCPAINT消息 在这个消息里,你可以进行窗体,控件,非客户区的自绘 好啦,现在转入正题,要修改非客户大小,必须处理 WM_NCCALCSI

对话框 应标题栏双击-MFC对话框不响应标题栏双击

问题描述 MFC对话框不响应标题栏双击 如何让MFC对话框不响应标题栏双击新手,能否请大神说的详细下,谢谢啦 解决方案 方法一: 重载PreTranslateMessage,添加如下代码: if(pMsg->message == WM_NCLBUTTONDBLCLK) // 非client区域的双击消息 if(pMsg->wParam == HTCAPTION) // 光标所在区域为标题栏 return TRUE; 方法二:重载OnNcLButtonDblClk,添加如下代码: if(nHit

MFC对话框的标题栏显示当前打开的文件

问题描述 MFC对话框的标题栏显示当前打开的文件 记事本中新建一个文件显示"文本文件1",再新建一个显示"文本文件2",但是文件没有保存啊,这是怎么做到的? 解决方案 我试了下,记事本没有你说的那么神奇.都是"未命名".但是你可以在文件夹中新建文本文档,那么会自动编号.原理应该是从0开始.先在当前目录中检查"新建文本文档n"是否存在,如果存在,n+1,直到找不到为止,作为当前文件文件名. 解决方案二: 系统自带记事本貌似没有你

vc++-如何使对话框里的EDIT控件响应键盘的回车键???

问题描述 如何使对话框里的EDIT控件响应键盘的回车键??? 我想解决的问题是: 在VC++程序中,向Edit控件中输入数据,然后敲击回车,就把输入的数据输送给其他文件. 想问问大家有没有程序实例或者解题思路????? 解决方案 void CMyEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); { if (nChar == VK_RETURN) { 你的处理代码 } CEdit::OnKeyDown(nChar, nRepCnt, n

MFC对话框中,如何让正在循环绘图的窗口上可以响应其他控件

问题描述 MFC对话框中,如何让正在循环绘图的窗口上可以响应其他控件 我需要编写一个程序,在对话框上面有一个图片控件可以在不断地以固定刷新率绘图,然后在该对话框上有一个按钮可以终止图片控件的绘图行为.但是在实际中,窗口一旦循环绘图以后就不受控制了,应该怎么办? 解决方案 非常感谢,已经通过别的方式解决了, 解决方案二: http://blog.csdn.net/cometnet/article/details/8278383 把这个doevents函数放在你的绘图循环中 解决方案三: 用一个定时

mfc对话框添加一个button按钮,为什么点击两次才能响应

问题描述 mfc对话框添加一个button按钮,为什么点击两次才能响应 mfc对话框添加一个button按钮,为什么点击两次才能响应,急急急,拜托解答下 解决方案 你按钮里面怎么写的,有没有什么判断的逻辑,需要第二次点击才能触发. 解决方案二: m_bOpenPort=!m_bOpenPort; //点一次改变一次,和m_bOpenPort初值有关 解决方案三: 是消息处理函数的问题吧?不知道你的响应是指什么. 按钮没放多了?挪开按钮,看看下面还有没有. 解决方案四: 是不是两次点击连接在一起了

MFC 对话框中动态创建N级菜单以及响应事件

创建一个基于对话框的工程,工程名为CreateMenu 为该对话框增加一个文件菜单项和测试菜单项,如下图所示   测试菜单项至少要有一个子菜单项 在对话框属性中关联该菜单 在resource.h中增加一个ID_TESTMENU宏 #define ID_TESTMENU          5000   在对话框中添加一个Button按钮,建立消息映射,编辑代码如下 void CCreateMenuDlg::OnButton1() { // TODO: Add your control notifi

vc++在MFC对话框上用程序生成控件(比如Text和Edit控件),求如何实现?

问题描述 vc++在MFC对话框上用程序生成控件(比如Text和Edit控件),求如何实现? vc++我想在MFC对话框上用程序生成控件(比如Text和Edit控件),求如何实现?(不是用工具条拖动控件到对话框上) 1.用程序生成控件2.控件在对话框上准确定位 求大神指导下 解决方案 一个 CreateWindow() 就能搞定,例子很多,自己找. 解决方案二: MFC我没有研究过,但我想MFC中应该可以调用Win32API吧,可以看看这几个,虽然不是MFC,但是在MFC里想必是可以用的.htt