MFC按钮(Button)上的文字与图标显示

2023-05-16

MFC按钮(Button)上的文字与图标显示

一、新建对话框


  MFC中使用以下两种方法可以得到对话框:
  1.1 使用如图1所示的方法,新建一个基于对话框的应用程序;
  1.2 在已有的项目中,找到“资源视图”中的Dialog,右键选择“插入Dialog(E)”,如图2所示。

图1
图2

二、按钮(Button)上的文字与图标进行显示操作


  以上述1.1的方法为例,在MFC中对话框上,对按钮(Button)上的文字与图标进行显示操作。

2.1 为按钮添加变量

   如图3所示,按钮右键选择“添加变量(B)...”,设置变量名,点击“完成”;
图3

2.2 查看对话框类与函数

  选中对话框右键,选择“类向导(Z)…”,可查看对话框对应的类、头文件.h、源代码文件.cpp和基类等信息。在对话框类的头文件中,以及源代码文件的数据交换函数DoDataExchange()中可查看2.1添加的按钮变量;

2.3 对按钮进行修改的函数

  在初始化函数OnInitDialog()中,添加代码可对按钮的文字和图标进行更改。

三、按钮(Button)的功能实现


  下面代码实现了设置字体、设置按钮位置与大小、按钮上添加图标、鼠标在按钮上时显示文字提示、去除按钮默认选中、使用代码在对话框上创建按钮六个功能,前四个功能的效果如图4所示。

图4

3.1 设置字体、设置按钮位置与大小、按钮上添加图标

对话框类头文件中:

	CFont m_font;//操作字体对象
	CToolTipCtrl m_stat;//工具提示控件对象

初始化函数OnInitDialog()中:

	//设置字体
	m_font.CreateFont(30, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, _T("字体设置"));//第一个参数为设置字体大小,第五个参数为风格设置——加粗、斜体。。。
	GetDlgItem(IDOK)->SendMessage(WM_SETFONT, WPARAM(HFONT(m_font)), 0);
	
	//设置按钮位置与大小
	m_btn_ok.MoveWindow(400, 350, 100, 50);
	
	//按钮上添加图标
	HICON hIconOK;
	//hIconOK = AfxGetApp()->LoadIcon(IDR_MAINFRAME);//这句只加载图标,无法设置图标大小
	//更改按钮的Icon属性——True时只显示图标,False时显示图标和文字
	hIconOK = (HICON)LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME), IMAGE_ICON, 40, 40, LR_DEFAULTCOLOR | LR_CREATEDIBSECTION);//加载图标,第四、五个参数为设置图标大小
	m_btn_ok.SetIcon(hIconOK);

3.2 鼠标在按钮上时显示文字提示

对话框类头文件中:

	CToolTipCtrl m_stat;//工具提示控件对象

初始化函数OnInitDialog()中:

	//设置鼠标在按钮上时的文字提示
	m_stat.Create(this);
	m_stat.AddTool(GetDlgItem(IDOK), _T("确定按钮"));
	//m_stat.SetDelayTime(0); //设置延迟,如果为0则不等待,立即显示
	//m_stat.SetTipTextColor(RGB(255, 0, 0)); //设置提示文本的颜色
	//m_stat.SetTipBkColor(RGB(255, 0, 0)); //设置提示框的背景颜色
	//m_stat.SetMaxTipWidth(100);//设置文本框的最大宽度,注意里边的数值单位为像素,所以要通过不断测试来选定最理想的宽度。利用此句可显示多行
	m_stat.Activate(TRUE); //设置是否启用提示

  此时,鼠标在按钮上时还无法显示文字提示,需要重写对话框类的PreTranslateMessage()函数,如图5所示:
  1.右键对话框类,选择“属性( R )”;
  2.点击重写;
  3.选择PreTranslateMessage();
  4.添加 m_stat.RelayEvent(pMsg)。

图5

3.3 去除按钮默认选中

  (1)设置按钮的Default Button属性为False;
  (2)初始化函数OnInitDialog()的返回值修改为FALSE。

	return FALSE;  // 除非将焦点设置到控件,否则返回 TRUE

3.4 使用代码在对话框上创建按钮

对话框类头文件中:

	CButton m_btn;;//按钮对象

初始化函数OnInitDialog()中:

	//第五个参数为按钮的ID,可在Resource.h中,按照已有的ID格式添加该按钮的ID
	//ID名与ID值不应与已有ID重复
	m_btn.Create(_T("创建的按钮"), BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD, CRect(0, 0, 100, 50), this, 2);

  该方法创建按钮,也可使用3.1、3.2的方法对按钮进行设置;并且在创建按钮时,按钮对象已经与ID相互关联,无需再在数据交换函数中进行关联,如下代码所示:

void CMFCDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDOK, m_btn_ok);//使用工具箱中的按钮工具创建的按钮,在2.1添加变量时,自动生成这句话
	//DDX_Control(pDX, ID_TEST, m_btn);//ID_TEST在Resource.h中添加,无需使用这句话,否则会报错
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC按钮(Button)上的文字与图标显示 的相关文章

  • 如何在函数执行后停止 tkinter?

    我在停止 提要 时遇到问题 cancel 参数似乎对 after 方法没有任何影响 尽管 feed stop 被打印到控制台 我正在尝试使用一个按钮来启动源 另一个按钮来停止源 from Tkinter import Tk Button i
  • MFC编辑控件更新

    我尝试使用它添加的变量来更新编辑控件的文本 这是一个CString但我失败了 m sNrAuto some text UpdateData TRUE 我也尝试过使用UpdateWindow 但编辑控件仍为空白 我知道我可以使用SetWind
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • MFC 中位图背景绘制的线程类型

    我有一个 MFC 文档 视图 C 图形应用程序 它将所有绘图都绘制到离屏位图 然后将其复制到 OnDraw 方法中提供的 CDC 指针 在过去的几天里 我一直在寻找将绘图组件放置在单独的工作线程中 这样它就不会停止 GUI 当我执行此操作时
  • Javascript:如何禁用提交按钮,直到验证所有字段?

    我有几个工作正常的验证函数 我想用简单的 javascript 编写一个额外的验证 没有 jQuery 等 对于整个表单 根据其他验证函数返回 true 还是 false 来禁用 启用 提交 按钮 我该怎么办 例如 对于我的主要 HTML
  • 更改 GLUT 调用以与 MFC/C++ 一起使用

    我有一个使用 GLUT 进行 OpenGL 渲染的程序 现在我需要它位于 MFC 项目内部 以便它可以与另一个程序组件一起使用 我已经按照这个教程进行操作 http www codeguru com cpp g m opengl openf
  • 如何通过 HTML 按钮播放声音

    我目前通过网站播放音乐的方法是通过 HTML 音频标签 不过我希望能够通过 HTML 按钮来播放它 该按钮应该能够在播放和停止之间切换音乐 我在 JSFiddle 创建了一个示例 但不知道如何实现它 有人可以告诉我如何使用我的 JSFidd
  • Windows API 中逻辑坐标和设备坐标之间的混淆

    我一直在研究一个使用两个函数的 Visual Studio C Windows 应用程序项目SetWindowExt and SetViewportExt 我对这两个函数的作用以及为什么它们是必要的感到困惑 搜索这些函数 我得出了逻辑坐标和
  • C++ 中的转换错误

    有人可以帮我解决这个错误吗 我是 C 新手 看来错误就发生在一堆宏中 我能做什么来解决它 或者我怎样才能追踪到它的源头 我真的不明白这个错误 这是否意味着编译器尝试转换该方法void ReadCPUparameter to a LRESUL
  • Visual Studio 中列表框的上移、下移按钮[重复]

    这个问题在这里已经有答案了 我正在尝试制作一个上移按钮和一个下移按钮 以移动 Microsoft Visual Studio 2012 中列表框中的选定项目 我已经在 WDF jquery winforms 和其他一些表单中看到了其他示例
  • 如何禁用 Yii2 中的按钮

    我正在尝试禁用创建项目 Button当用户未登录时 该按钮将Hide or disable 这是我的条件 p p 它正在工作 但是 当用户登
  • 除了前一个按钮意图之外,如何添加另一个按钮意图?

    这是我的代码 它包含一个名为的按钮button1A当我单击它时 它会打开一个名为的列表list1 如何为另一个名为 button2A 的按钮添加代码 该按钮将打开一个列表 List2 import android os Bundle imp
  • 如何在按钮上执行mysql [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions PHP 单击按钮时如何执行 SQL
  • 使用 MFC 对象初始化 std::map 无法编译

    MFC初学者看这里 我尝试过初始化std map像这样 在CView的标题中 myprogramView h std map
  • MFC:如何设置CEdit框的焦点?

    我正在开发我的第一个简单的 MFC 项目 但我正在努力解决一个问题 想要设置所有的焦点CEdit其中一个对话框中的框 我的想法是 当打开对话框时 焦点位于第一个编辑框上 然后使用 选项卡 在它们之间交换 我看到了方法SetFocus 但我无
  • Android - 如何简单地拖放按钮?

    我在这里找到了一个适合初学者的教程 http androidrox wordpress com 2011 05 13 android sample app drag and drop image using touch http andro
  • 如何让文字适合Button?

    在我的 Android 应用程序中 我有一个用于对照片进行投票的按钮 当用户选择这个按钮时 这个按钮上的文字变成 感谢您的投票 当他看到他之前投票过的照片时 按钮上会看到文字 您已经为这张照片投票 问题是它看起来像这样 http i55 t
  • 如何使按钮在我的应用程序中透明但可见

    我希望我的按钮是透明的 因为我有一个活动图像作为背景 如果按钮不透明 则这些按钮会覆盖图像 并且图像背景看起来毫无用处 如果我使用android background android color transparent 它使我的按钮除了上面
  • Material UI - 更改主题中的按钮文本颜色

    我在直接在 Material UI 主题中更改按钮文本颜色时遇到问题 更改主色 按钮字体大小效果很好 因此问题不在于传递主题 这是我的代码 import React from react import MuiThemeProvider cr

随机推荐

  • clion + opencv环境搭建

    clion是一个jetbrains提供的c 43 43 开发环境 xff0c 和idea pycharm等开发工具类似 xff0c 界面有很多相似的地方 clion内置了一个mingw的编译环境 xff0c 自带了gcc g 43 43 等
  • ChatGLM-6B本地cpu部署

    ChatGLM 6B是清华团队研发的机器人对话系统 xff0c 类似ChatGPT xff0c 但是实际相差很多 xff0c 可以当作一个简单的ChatGPT ChatGLM部署默认是支持GPU加速 xff0c 内存需要32G以上 普通的机
  • java通过HttpServletRequest获取post请求中的body内容

    在java web应用中 xff0c 我们如何获取post请求body中的内容 xff1f 以及需要注意的问题 通常利用request获取参数可以直接通过req getParameter name 的方式获取url上面或者ajax data
  • Your password does not satisfy the current policy requirements解决办法

    mysql5 7 x安装以后 xff0c 想修改随机生成的密码为简单容易记忆的密码 xff0c 如root 123456等 xff0c 这时候通过修改密码的几种方式都不行 xff0c 出现密码不符合当前安全策略要求 为了解决这种问题 xff
  • 用一条SQL语句查询出每门课都大于80分的学生姓名

    两道sql题 xff1a 1 用一条SQL语句查询出每门课都大于80分的学生姓名 2 删除除了自动编号不同 xff0c 其他都相同的学生冗余信息 第一题数据如下 xff1a 分析 xff1a 每门课都大于80分 xff0c 就是说学生最低分
  • ajax通过post方法传数组

    ajax在web项目开发中经常会用到 xff0c 平时我们传递数据 xff0c 基本都是一个参数名对应一个参数值 xff0c 后端通过参数名就可以得到参数 xff0c 从而进行相关逻辑处理 xff0c 但是有时候我们会遇到批量操作 xff0
  • “操作无法完成因为其中的文件夹或文件已在另一个程序中打开”解决办法

    在windows系统中 xff0c 我们经常会遇到这样一个问题 xff1a 删除某一个文件或者文件夹 xff0c 被提醒 xff1a 操作无法完成 xff0c 因为其中的文件夹或文件已在另一个程序中打开 这个时候我们一般会先检查是否真的有程
  • 几种常见mybatis分页实现

    mybatis框架分页实现 xff0c 有几种方式 xff0c 最简单的就是利用原生的sql关键字limit来实现 xff0c 还有一种就是利用interceptor来拼接sql xff0c 实现和limit一样的功能 xff0c 再一个就
  • curl发送POST方法类型带body参数请求以及发送上传文件请求

    curl在实际中会被postman等替代 xff0c 但是他仍然是一个快速的模拟http请求的工具 xff0c 而且也有他不可替代的理由 xff0c 使用简单 xff0c 在命令行下就可以完成 今天不是介绍如何使用curl模拟各种GET P
  • 第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列

    第45章 DCMI OV2640摄像头 全套 200 集视频教程和 1000 页 PDF 教程请到秉火论坛下载 xff1a www firebbs cn 野火视频教程优酷观看网址 xff1a http i youku com firege
  • 技术分享|探究群体智能—基于UWB定位技术的无人机集群协同

    随着无人机性能水平提高 xff0c 无人机在民用类和军事类活动中的使用越来越广泛 由于无人机飞行环境和任务难度不同 xff0c 单架无人机因为自身动力和负荷能力很难独自完成任务 xff0c 无人机集群协同作业则是当前科技现代化的任务要求 集
  • 技术分享 | 基于室外RTK/GPS定位系统下的无人机集群协同

    在自然界中 xff0c 为弥补个体能力的不足 xff0c 诸多生物种群能通过个体相互之间的交流与合作呈现出某种群体行为 xff0c 比如鱼群结群游弋 鸟群聚集迁徙以及蚂蚁协同搬运等 受此激励 xff0c 人们希望开发像鸟群 鱼群一样自由集结
  • STL学习系列之一——标准模板库STL介绍

    说明 xff1a 此文为连载版 xff0c 今天学习STL的介绍 1 STL介绍 标准模板库STL是当今每个从事C 43 43 编程的人需要掌握的技术 xff0c 所有很有必要总结下 本文将介绍STL并探讨它的三个主要概念 xff1a 容器
  • 如何在cmakelist中,find_package取指定路径中查找

    在开发中 xff0c 最常遇到环境问题 xff0c 这个opencv版本不对 xff0c 那个pcl版本不对 xff0c 如果将原系统目录下的库卸载后重装新的版本 xff0c 往往会出现一些意想不到的事 xff0c 费时费力 我常常这样做
  • MFC模型树控件TreeCtrl实现按下Ctrl键多选,按下Shift键连选

    MFC模型树控件TreeCtrl实现按下Ctrl键多选 xff0c 按下Shift键连选 MFC的List Box只需要将控件属性中的Selection项设置为Extended xff0c 即可实现Ctrl键多选和Shift键连选 xff1
  • PCL点云库——欧式聚类分割

    欧式聚类分割 pcl EuclideanClusterExtraction是基于欧式距离提取集群的方法 xff0c 仅依据距离 xff0c 将小于距离阈值的点云作为一个集群 具体的实现方法大致是 xff1a 1 找到空间中某点p10 xff
  • PCL点云库——旋转平移矩阵

    旋转平移矩阵 点云摆正 点云配准等点云操作实质上是对点云进行旋转平移 xff0c 使点云变换至目标位姿 PCL中使用的是矩阵乘列向量的计算方法 下面分别给出了点A x y z 绕X轴 Y轴 Z轴逆时针旋转角度 的示意图与旋转矩阵 xff08
  • PCL点云库——点云法线估计

    点云法线估计 PCL中的所有点云的法线都是指向视点的 xff0c 视点坐标默认为 0 0 0 xff0c 对视点进行设置 xff0c 则可对法线进行定向 如图1与图2所示 xff0c 分别为斯坦福兔子在视点坐标为 10 10 10 与 10
  • PCL点云库——PCA粗配准

    PCA粗配准 主成分分析法 Principal Component Analysis xff0c 简称PCA 是使数据简化的算法 xff0c 通过揭露数据内部的主要分布方向 xff0c 减少了数据集的维数 xff0c 从而保留了点云集中贡献
  • MFC按钮(Button)上的文字与图标显示

    MFC按钮 xff08 Button xff09 上的文字与图标显示 一 新建对话框 MFC中使用以下两种方法可以得到对话框 xff1a 1 1 使用如图1所示的方法 xff0c 新建一个基于对话框的应用程序 xff1b 1 2 在已有的项