修改光标形状,如果是修改系统内光标形状,那就很简单了,直接是用::SetCursor(::LoadCursor(NULL,MAKEINTRESOURCE(IDC_CURSOR1)))就可以修改成功了,但这只是更改一时的光标形状。如果想要长久修改光标形状,就需要在光标消息中修改鼠标形状了。

1、首先,添加WM_SETCURSOR消息,得到消息函数OnSetCursor;

2、在消息函数OnSetCursor中,添加以下代码

 BOOL CMy123456Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
HCURSOR hcur = ::LoadCursor(NULL,IDC_CROSS);
::SetCursor(hcur);
return TRUE;
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}

其中要注意的是,LoadCursor中的第一个参数为进程句柄,当调用的是系统的鼠标的时候,应该为NULL,但是当使用的是自定义的鼠标图案的时候,则为当前的进程句柄,例如在对话框程序总可以用AfxGetApp()->m_hInstance;

第二个参数就是则应为一个字符串,通过鼠标图案的资源ID得到的一个字符串,例如在资源视图新插入一个Cursor,为其命名为IDC_CURSOR1,则其光标资源的ID就是IDC_CURSOR1,那么我们就可以把第二参数设置为MAKEINTRESOURCE(IDC_CURSOR1);因此,我们加载自定义光标图形就可以如下代码

 BOOL CMy123456Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
HCURSOR hcur = ::LoadCursor(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDC_CURSOR1));
::SetCursor(hcur);
return TRUE;
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}

其中,用LoadCursor加载光标,得到的大小是有系统自己规定的,我们自己没有办法修改。所以,当我们需要修改光标大小时,往往使用的是LoadImage函数;这个方法也是大部分人加载自定义光标时所使用的方法。其代码如下:

 BOOL CMy123456Dlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
HCURSOR hcur = (HCURSOR)::LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDC_CURSOR1),IMAGE_CURSOR,,,LR_COPYFROMRESOURCE);
::SetCursor(hcur);
return TRUE;
return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}
 
LoadImage
函数功能:该函数装载图标,光标,或位图。
函数原型:HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int cyDesired,UINT fuLoad);
 
参数介绍:
  • hinst:指向需加载该资源的module;可以填写当前进程的句柄也可以为NULL,不过一般可以将这个参数设为NUll。
  • lpszName:标识要加载的资源;可以填写资源文件名的路径,如果fuLoad设为LR_LOADFROMFILE,则该参数为资源的文件名,如位图文件、ICON文件,当然也包括Cursor文件。如果是这个方式填写,在运行软件的地方要把资源文件拷贝过去,否则找不到光标的;也可以填写MAKEINTRESOURCE(IDC_CURSOR1),fuLoad要设置为LR_COPYFROMRESOURCE;用这个方式,就不需要在额外拷贝资源文件了,所以一般是使用这个方式。
  • uType:指明加载的资源类型,它的值可以是IMAGE_BITMAP. 加载位图;IMAGE_CURSOR. 加载cursor;IMAGE_ICON. 加载ICON。
  • cxDesired,光标的宽度,值是以像素为单位的整数。
  • cyDesired ,光标的长度,值是以像素为单位的整数。
  • fuLoad,资源加载的方式,当值为LR_LOADFROMFILE时,指从文件加载。

LoadCursorFromFile

这个函数也可以加载光标。参数直接填写资源文件名。

MFC中修改光标形状的更多相关文章

  1. 如何改变vim中的光标形状 : 在插入状态下显示为 beam?而在 其他 状态下 为 block?

    分成两种情况来说明: 如果是在 shell 即: gnome-termial终端中, 来启动或 使用 vim的话, 你是 无法 实现这种需求的: 改变vim中的光标形状 : 在插入状态下显示为 bea ...

  2. MFC中修改程序图标

    在使用MFC时,我们经常需要修改我们得到的exe文件的图标.如:写一个随机画圆的小程序,我们就希望该程序的图标是个圆或者是和圆有关的图标.所以,在这里我就记录一下我修改图标的步骤. 顺便提一下,我使用 ...

  3. MFC中修改静态文本框中文字的字体、颜色

    假设有一个静态文本框控件,其ID为:IDC_STATIC_XSDJ,且关联一个control类的CStatic类型的变量m_static_xsdj. 设置字体时自然要用到CFont类,下面介绍两种方法 ...

  4. MFC中修改默认启动对话框方法

    // CMyAppEApp 初始化 BOOL CMyAppEApp::InitInstance(){// 如果一个运行在 Windows XP 上的应用程序清单指定要// 使用 ComCtl32.dl ...

  5. MFC中的一般经验之谈5

    MFC中提供了CString的类,可以用在一切使用字符串的地方.可以完美取代const char* 或者 LPCTSTR(经常在WinAPI)中传递参数.并且如果需要通过空间进行字符串的数据传递DDX ...

  6. 隐藏android中EditText中的下划线以及修改光标颜色

    在android开发中 EditTextText是我们经常用到的,我们使用时会有一些小问题,当我们点击输入文字时,EditText中的光标和下划线会变成粉红色. 解决方法很简单,我们只要在EditTe ...

  7. MFC中的主窗口修改标题

    MFC中的主窗口修改标题 如何去掉“无标题”1.在主程序中的InitInstance(): m_pMainWnd->SetWindowText("你要显示的东西如果不想显示置空就行&q ...

  8. MFC中窗口启动后,CEdit编辑框默认光标位置设置,顺序的调节方法

    MFC中窗口启动后,CEdit编辑框默认光标位设置,顺序的调节方法 在编辑界面按下ctrl+D键,就会出现所有控件的Tab键顺序,按照自己想要的顺序依次点击控件,就可以重新安排顺序.数值1就是默认停留 ...

  9. 重新修改AD中PCB的形状快捷键

    Altium Designer 快速修改板子形状为Keep-out layer大小   1,切换到 Keep-out layer层,   2,选择层,快捷键为S+Y:   3,设计-板子形状-按照选择 ...

随机推荐

  1. 「SDOI2009」HH的项链

    「SDOI2009」HH的项链 传送门 数据加强了,莫队跑不过了. 考虑用树状数组. 先把询问按右端点递增排序. 然后对于每一种贝壳,我们都用它最右一次出现的位置计算答案. 具体细节看代码吧. 参考代 ...

  2. JS简单回弹原理

    /* *JS简单回弹原理 */ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...

  3. Django 学习之cookie与session

    一.cookie和session的介绍 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  4. Tensorflow机器学习入门——网络可视化TensorBoard

    一.在代码中标记要显示的各种量 tensorboard各函数的作用和用法请参考:https://www.cnblogs.com/lyc-seu/p/8647792.html import tensor ...

  5. 设计模式课程 设计模式精讲 8-8 单例设计模式-Enum枚举单例、原理源码解析以及反编译实战

    1 课堂解析 2 代码演练 2.1 枚举类单例解决序列化破坏demo 2.2 枚举类单例解决序列化破坏原理 2.3 枚举类单例解决反射攻击demo 2.4 枚举类单例解决反射攻击原理 3 jad的使用 ...

  6. python 网络爬虫(三)

    一.网站地图爬虫 在一个简单的爬虫中,我们将使用实例网站 robots.txt 文件中发现的网站地图来下载所有网站,为了解析网站地图,我们将会使用一个简单的正则表达式,从<loc>标签中提 ...

  7. Pytorch 分割模型构建和训练【直播】2019 年县域农业大脑AI挑战赛---(四)模型构建和网络训练

    对于分割网络,如果当成一个黑箱就是:输入一个3x1024x1024 输出4x1024x1024. 我没有使用二分类,直接使用了四分类. 分类网络使用了SegNet,没有加载预训练模型,参数也是默认初始 ...

  8. rally问题合集

    rally 执行过程中涉及到keystone的用例,需要调用adminurl,在-/rally/lib/python2.7/site-packages/rally/osclients.py(主机文件的 ...

  9. DatePicker和DataPickerDialog以及AutoCompleteTextView的基本使用方法

    1.DatePicker和DatePickerDialog的基本使用方法: main.xml: <?xml version="1.0" encoding="utf- ...

  10. SQL Server DATEADD() 函数 一步步使用教程

    SQL Server DATEADD() 函数 DATEADD() 函数在日期中添加或减去指定的时间间隔. DATEADD(datepart,number,date)date 参数是合法的日期表达式. ...