一、背景
MFC里的消息提示框(MessageBox)是带按钮的,比如:MB_OK,MB_OKCANCEL,MB_YESNO,不支持无按钮的情况。
二、方案
通过建立一个非模态对话框(不会阻塞程序往下运行),并在里面添加一个静态文本框(设置只读属性),然后将要提示的内容设置给这个文本框,将标题设置给对话框,再居中显示这个对话框就能实现无按钮消息提示框。
三、实现
-
新建无按钮消息提示对话框
-
给这个对话框添加对应的类
-
给静态文本库添加对应的CEdit变量
-
添加修改静态文本内容的函数
int CDiagMessageBox::SetShowText(CString ShowText)
{
m_ShowText = ShowText;
UpdateData(FALSE);
UpdateWindow();
return 0;
}
- 在主窗口里添加这个提示框的对象,并且添加对应的消息提示框显示函数
-
在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);
}
}
- 调用ShowMessageBox,效果如下:
四、问题
提示文本开头多了1个竖线,暂时不知道原因,猜测是某个属性没设置好。