MFC 无按钮消息提示框

一、背景
MFC里的消息提示框(MessageBox)是带按钮的,比如:MB_OK,MB_OKCANCEL,MB_YESNO,不支持无按钮的情况。

二、方案
通过建立一个非模态对话框(不会阻塞程序往下运行),并在里面添加一个静态文本框(设置只读属性),然后将要提示的内容设置给这个文本框,将标题设置给对话框,再居中显示这个对话框就能实现无按钮消息提示框

三、实现

  1. 新建无按钮消息提示对话框

  2. 给这个对话框添加对应的类

  3. 给静态文本库添加对应的CEdit变量

  4. 添加修改静态文本内容的函数

int CDiagMessageBox::SetShowText(CString ShowText)
{
	m_ShowText = ShowText;
	UpdateData(FALSE);
	UpdateWindow();
	return 0;
}
  1. 在主窗口里添加这个提示框的对象,并且添加对应的消息提示框显示函数
  • 在CMainDlg.h里定义无按钮类型:
    //系统按钮用到0x00000006L
    #define MB_NOBUTTON 0x00000007L

  • CMainDlg类里面添加:

private:
CDiagMessageBox msgboxDlg;
public:
UINT ShowMessageBox(LPCTSTR ShowText, LPCTSTR Title, UINT nType);
  • CMainDlg.cpp里添加:
UINT CMainDlg::ShowMessageBox(LPCTSTR ShowText, LPCTSTR Title, UINT nType)
{

	if (nType == MB_NOBUTTON)//无按钮提示框
	{
		msgboxDlg.Create(IDD_DIALOG_MSG_BOX);//非模态对话框
		msgboxDlg.SetWindowText(Title);
		msgboxDlg.CenterWindow();//居中显示
		msgboxDlg.ShowWindow(SW_SHOWNORMAL);
		msgboxDlg.SetShowText(ShowText);
		return 0;
	}
	else//有按钮提示框用MessageBox
	{
		msgboxDlg.DestroyWindow();//销毁无按钮提示框
		return MessageBox(ShowText,Title,nType);
	}

} 
  1. 调用ShowMessageBox,效果如下:

四、问题
提示文本开头多了1个竖线,暂时不知道原因,猜测是某个属性没设置好。

posted @ 2024-05-24 17:41  明森  阅读(232)  评论(0)    收藏  举报