MFC 控件处鼠标变型

转载 2013年12月03日 17:11:41

设置鼠标在对话框某个区域的响应,可以添加WM_MouseMove消息响应,并在OnMouseMove()函数中实现操作。

 

但是,控件其实也是一个对话框。所以,如果要设置鼠标在控件所在范围内的事件,用WM_MouseMove是行不通的。

 

解决方法:

重载OnSetCursor()方法。

 

步骤:

1.打开对应对话框的类向导ClassWizard。 

2.在消息映射MessageMaps中添加消息Message:WM_SETCURSOR。 

3.然后程序代码中会添加进函数:

OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)

 

4.在该函数中添加if语句,其中的条件语句判断是否到达指定控件,

如:if(pWnd == GetDlgItem(IDC_BTN_MODIFY)) 

 

5.在if语句中将鼠标设置成目标样式

SetCursor(LoadCursor(NULL, IDC_HAND));  //此处IDC_HAND是自定义的鼠标形状,下面再详细解释

 

整个函数的代码如下:

BOOL CHall::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
 // TODO: Add your message handler code here and/or call default 
 if(pWnd == GetDlgItem(IDC_BTN_MODIFY))  
 {  
  SetCursor(LoadCursor(NULL,   IDC_HAND));
  return   TRUE;   //一定需要,否则达不到效果
    }  
 return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

 

 

*鼠标形状

鼠标的形状由SetCursor函数的第二个参数决定,表示光标资源。

1.系统光标资源名称

    IDC_APPSTARTING    标准的箭头和小沙漏

  IDC_ARROW          标准的箭头

  IDC_CROSS          十字光标

  IDC_HELP           标准的箭头和问号

  IDC_IBEAM          工字光标

  IDC_NO             禁止圈

  IDC_SIZEALL        四向箭头指向东、西、南、北

  IDC_SIZENESW       双箭头指向东北和西南

  IDC_SIZENS         双箭头指向南北

  IDC_SIZENWSE       双箭头指向西北和东南

  IDC_SIZEWE         双箭头指向东西

  IDC_UPARROW        垂直箭头

  IDC_WAIT           沙漏

 

2.自定义光标形状

在StdAfx.h中,或者对应对话框的头文件中宏定义:

#ifndef IDC_HAND
#define IDC_HAND MAKEINTRESOURCE(32649)
#endif

①以上表示使用手型,其实也属于系统图标,LoadCursor的第一参数为NULL。

 

②若使用自定义的图片,可将32649改成图片的资源ID(图片需要事先加载),并且LoadCursor的第一个参数要改成当前进程的句柄(试过AfxGetApp()->m_hInstance,不奏效,待解决)。

 

MFC 图片控件图片加载以及鼠标移动事件和鼠标点击事件

首先展示一下效果!
  • hediping9811
  • hediping9811
  • 2014年04月09日 16:08
  • 1823

MFC鼠标悬停与离开

鼠标悬停与离开说明: MFC默认的情况下,是不会触发鼠标悬停和离开的消息。手动添加输小悬停和离开消息及消息处理函数 声明并定义函数(其中IDC_ BUTTON_ OK为目标按钮,IDC_ EDIT_ ...
  • m_wordPlan
  • m_wordPlan
  • 2016年12月24日 09:47
  • 845

MFC:为STATIC控件添加鼠标移动事件(VS2010)

这个问题弄了我两天的时间,晕死~~~网上查资料的时候众说纷纭,绝大多数模棱两可的说了思路什么的,这叫初学者怎么活? 现在这里一步一步说怎么实现这个功能,这里我用的是一个对话框作为主窗口来实现的,实现当...
  • q8547957
  • q8547957
  • 2014年03月10日 10:37
  • 1039

MFC/VC中当鼠标停靠在按钮等控件上时出现文字提示功能

在VC中,常常为一些图片按钮添加一些功能提示。 下面讲解实现过程,大部分代码是网上的,但已经过测试,可以直接使用~ 该功能的实现主要是用CToolTipCtrl类。该类在VC  msdn中...
  • dongganxiao_maidou
  • dongganxiao_maidou
  • 2016年10月11日 09:03
  • 1646

MFC/VS 2010中对话框控件初始显示模糊,鼠标移动到上面才显示的问题

最近做有关MFC对话框的相关设计时,出现一个奇怪的现象。当编写完对话框中控件的初始数据后,对话框的控件不能立即显示出数据,只有当鼠标移动到对话框控件上的时候,数据才会显示出来。初始显示对话框时,按钮显...
  • u011450490
  • u011450490
  • 2015年07月05日 17:20
  • 825

VC让鼠标指到按钮上变成手型

两种方法: 1、派生一个CButton类,然后重载OnSetCursor函数,在里面 使用SetCursor函数设置鼠标指针。 然后删除 return CButton::OnSetCursor...
  • season1201
  • season1201
  • 2016年11月27日 21:52
  • 634

如何处理鼠标离开窗口的消息

首先,WM_MOUSELEAVE是鼠标离开窗口时发出的消息,但是这个消息与普通消息不同,要收到WM_MOUSELEAVE消息必须先调用TrackMouseEvent,并且每调用一次TrackMouse...
  • vigoss331
  • vigoss331
  • 2016年09月23日 14:59
  • 487

MFC中鼠标在picture控件中画矩形提取感兴趣区域

MFC中在picture控件上画矩形
  • yongjiankuang
  • yongjiankuang
  • 2017年02月24日 21:45
  • 524

MFC/VC中怎样实现slider滑块控件鼠标点击那里,就刚好落到点击位置

想要让Slider Control实现在鼠标点击到哪, 滑动就移动到哪的效果,就像播放器的进度条和音量那样 正常的Slider Control点击时,只会移动一个固定的距离长度 于是想到了...
  • zhangyulin54321
  • zhangyulin54321
  • 2013年04月04日 15:00
  • 2464

MFC中listControl控件右键双击响应事件

昨天修改一个很久以前的程序,添加功能遇到这样一个问题。 ListControl控件中添加多选按钮风格,通过左键单击、双击、右键单击、双击都是可以选中打钩的。 m_list2.SetCheck(nI...
  • bigtree_mfc
  • bigtree_mfc
  • 2016年08月13日 10:03
  • 1205
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC 控件处鼠标变型
举报原因:
原因补充:

(最多只允许输入30个字)