MFC如何改变消息框的三个按钮的文本值

例如:MessageBox(_T("是否重新测试?"),_T("IL&RL"),MB_ICONQUESTION|MB_YESNOCANCEL);显示“是”,“否”,“取消... 例如:MessageBox(_T("是否重新测试?"), _T("IL&RL"), MB_ICONQUESTION | MB_YESNOCANCEL);显示“是”,“否”,“取消”,我想改为“重测”,“继续”,“取消”。哪位大神指点一下 展开
 我来答
yinfengnong
2018-07-24 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2302万
展开全部

MessageBox 上的按钮文字并不能直接修改,一种方法可以使用钩子,间接修改按钮上的文字,另一种就是自己做一个类似 MessageBox 功能的对话框。

下面的例子是使用钩子做的,关键代码如下:


// 定义一个钩子句柄
HHOOK hMsgBoxHook;

// 定义CBT钩子过程
LRESULT CALLBACK MsgBoxCBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
switch (nCode) {
case HCBT_ACTIVATE:
HWND hWnd = (HWND)wParam;
SetDlgItemText(hWnd, IDYES, _T("重测"));
SetDlgItemText(hWnd, IDNO, _T("继续"));
SetDlgItemText(hWnd, IDCANCEL, _T("取消"));
return 0;
}

return CallNextHookEx(hMsgBoxHook, nCode, wParam, lParam);
}

// 定义一个 MsgBox 函数
int MsgBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
hMsgBoxHook = SetWindowsHookEx(WH_CBT, MsgBoxCBTProc, NULL, GetCurrentThreadId());

int ret = MessageBox(hWnd, lpText, lpCaption, uType);

UnhookWindowsHookEx(hMsgBoxHook);

return ret;
}

void Cdemo5Dlg::OnBnClickedButton1()
{
// 调用 MsgBox
MsgBox(GetSafeHwnd(), _T("是否重新测试?"), _T("IL&RL"), MB_ICONQUESTION | MB_YESNOCANCEL);
}

运行结果:

匿名用户
2018-07-24
展开全部
自定义一个输出窗口, 增加一个MSGBOX函数用于显示该窗口, 你想怎么改都可以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式