当前位置: 首页 > news >正文

MFC 使用自定义光标

文章目录

  • 前言
  • 一、制作光标文件
  • 二、使用步骤
    • 1. 创建对话框程序项目
    • 2. 导入光标文件
    • 3. 加载光标资源
    • 4. 添加鼠标事件
    • 5. 添加WM_SETCURSOR消息
  • 总结


前言

本文实现在MFC程序中使用自定义的光标,演示程序鼠标左键、中键、右键按下时分别加载不同的光标,鼠标释放后恢复默认光标,效果如下:
在这里插入图片描述


一、制作光标文件

找一个在线免费转换工具,把png,jpg转成cur光标文件,上传png文件(尺寸32X32合适),转换成功后下载cur文件备用
在线转换网站:
convertio
Imageonvert

二、使用步骤

1. 创建对话框程序项目

打开vs2017,新建MFC对话框程序

在这里插入图片描述
在这里插入图片描述

2. 导入光标文件

  1. 把转换成功的cur文件拷贝到项目res文件夹下
  2. 在vs2017资源视图中,右键菜单选“添加资源…”,弹出“添加资源”对话框,点“导入”,选择res文件夹下的cur文件
  3. 导入成功后在Icon资源下可以看到新导入的ID,可修改资源ID
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

3. 加载光标资源

在对话框类CCursorDemoDlg头文件中添加保存光标的句柄变量,在构造函数中调用LoadImage函数加载光标资源

头文件:

private:HCURSOR      m_curArrow;HCURSOR      m_curPan;HCURSOR      m_curWin;HCURSOR      m_curScale;HCURSOR      m_hCursor;

源文件构造函数:


CCursorDemoDlg::CCursorDemoDlg(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_CURSORDEMO_DIALOG, pParent)
{m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);m_curPan = (HCURSOR)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON_PAN),IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);m_curWin = (HCURSOR)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON_WIN),IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);m_curScale = (HCURSOR)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON_SCALE),IMAGE_ICON, 32, 32, LR_DEFAULTCOLOR);m_hCursor = m_curArrow = LoadCursor(NULL, IDC_ARROW);
}

4. 添加鼠标事件

在鼠标事件中调用SetCursor函数设置光标,鼠标按下消息设置想要的光标,鼠标释放设置为默认光标

void CCursorDemoDlg::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值m_hCursor = m_curWin;SetCursor(m_hCursor);CDialogEx::OnLButtonDown(nFlags, point);
}void CCursorDemoDlg::OnMButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值m_hCursor = m_curPan;SetCursor(m_hCursor);CDialogEx::OnMButtonDown(nFlags, point);
}void CCursorDemoDlg::OnRButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值m_hCursor = m_curScale;SetCursor(m_hCursor);CDialogEx::OnRButtonDown(nFlags, point);
}void CCursorDemoDlg::OnLButtonUp(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值m_hCursor = m_curArrow;SetCursor(m_hCursor);CDialogEx::OnLButtonUp(nFlags, point);
}void CCursorDemoDlg::OnMButtonUp(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值m_hCursor = m_curArrow;SetCursor(m_hCursor);CDialogEx::OnMButtonUp(nFlags, point);
}void CCursorDemoDlg::OnRButtonUp(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值m_hCursor = m_curArrow;SetCursor(m_hCursor);CDialogEx::OnRButtonUp(nFlags, point);
}

5. 添加WM_SETCURSOR消息

添加WM_SETCURSOR消息,在响应函数中调用SetCursor,并返回TRUE,注释默认代码

BOOL CCursorDemoDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{// TODO: 在此添加消息处理程序代码和/或调用默认值SetCursor(m_hCursor);return TRUE;//return CDialogEx::OnSetCursor(pWnd, nHitTest, message);
}

总结

  1. png,jpg转换为cur光标文件
  2. 在资源视图中导入cur光标文件
  3. LoadImage加载光标资源
  4. 添加鼠标事件,在响应函数中调用SetCursor设置光标
http://www.dtcms.com/a/541313.html

相关文章:

  • LeetCode 79. 单词搜索
  • 网站建设维护需要懂哪些知识漂亮网页模板
  • 大模型框架选型:LangChain 与 LlamaIndex、Haystack 的核心差异对比
  • 关注公众号平台seo案例视频教程
  • SPL量化工作台使用教程-1-数据和画图
  • 【QT】窗口
  • 脑科学支持的Python学习法:每天2小时碎片化训练,用‘神经可塑性’打败拖延症“
  • 长春网站业务哪个公司好网页设计师女生工资
  • 南昌做网站开发的公司有哪些竞价推广论坛
  • 行业首发!Spring AI Alibaba + Nacos 支持分布式 Multi-Agent 构建
  • 海口建设网站建立网站需要钱吗
  • Linux上的exec函数族详解
  • 产品推荐|千眼狼全新第二代背照式制冷sCMOS相机上市,再次刷新灵敏度和噪声极限
  • 常见协议格式
  • 境外网站可以备案吗长沙网站排名优化费用
  • h5游戏免费下载:上山打老虎
  • 力扣面试经典150题打卡
  • 网站设计就业压力官方网站开发招标须知
  • Android开发常见报错及解决方法(详细版)
  • 做网站内容火星人网页设计培训
  • 免费微网站_自助建站海外直播tiktok
  • 浔川社团总访问量超 13 万:数据见证成长,热爱铸就辉煌
  • Java的StringBuffer类
  • 商务网站建设的流程网站建设需求分析报告撰写
  • EagleTrader交易员采访|用概率取代情绪,让交易回归理性
  • 【复现】AI-IMU Dead-Reckoning
  • 哪个建设网站公司好苏州网站建设软件
  • 帮别人设计做关于图的网站关键词排名推广
  • Kotlin reified泛型 和 Java 泛型 区别
  • 新手如何优化网站排名国外网站注册