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

本文详细介绍了如何在MFC中创建对话框,并对按钮进行图文显示,包括设置字体、调整位置大小、添加图标,以及实现鼠标悬停时的提示文字。同时,讲解了去除按钮默认选中状态的方法和如何通过代码动态创建按钮。通过实例代码,展示了MFC对话框中按钮功能的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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中添加,无需使用这句话,否则会报错
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值