MFC如何将一个MessageBox设置成可选择确定和取消两个选项,并将消息框中的文字自定义化,代码示例
时间: 2024-10-14 14:17:41 浏览: 14
在MFC中,要创建一个带有多选按钮(如确定和取消)的消息框,可以使用CMessageLoop和CDialog机制。如果你想自定义文本,可以使用CStatic或CString来填充message box的caption和text。以下是一个基本的例子:
首先,你需要创建一个新的对话框模板(.rc文件),添加一个CButton控件,比如IDCANCEL和IDYES:
```xml
<controls>
<control id="IDD_MSGBOX" class="对话框" caption="自定义消息框" style="0, WS_POPUP">
<control id="BTN_OK" class="按钮" left="10" top="10" width="100" height="25" text="确定" caption="确定">
<event name="click" procedure="OnBtnOkClick"/>
</control>
<control id="BTN_CANCEL" class="按钮" left="120" top="10" width="100" height="25" text="取消" caption="取消">
<event name="click" procedure="OnBtnCancelClick"/>
</control>
</control>
</controls>
```
然后在`.cpp`文件中编写消息框的显示函数:
```cpp
void MyClassView::OnBtnOkClick()
{
C MessageBox(NULL, "这是自定义的文字", MB_YESNO | MB_DEFBUTTON1); // MB_YESNO用于两个按钮,MB_DEFBUTTON1默认第一个按钮为确定
}
void MyClassView::OnBtnCancelClick()
{
C MessageBox(NULL, "这是自定义的文字", MB_ICONEXCLAMATION | MB_ABORTRETRYIGNORE); // MB_ICONEXCLAMATION表示警告
}
```
在这里,`OnBtnOkClick` 和 `OnBtnCancelClick` 分别对应于点击确定和取消按钮时触发的操作。
注意,由于MFC的限制,直接在消息循环中调用MessageBox可能会导致意外的行为。更好的做法是在需要的时候显式地启动一个消息循环,例如:
```cpp
void MyClassView::CustomMessageBox()
{
CDialog dlg(IDD_MSGBOX);
if (dlg.DoModal() == IDYES) {
// 确定按钮被点击
} else if (dlg.GetDlgItem(IDC_BTN_CANCEL)->GetSafeHwnd()) {
// 取消按钮被点击
}
}
```
阅读全文