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

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

版权声明:本文为fei_12138原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。