一、使用场景
- 修改按钮文本
- 不想自己写一个窗口实现MessageBox
- 有时只想要简单弹窗,而文字提示不想用Windows默认的
MessageBox上的按钮文字不能直接修改。一种方法可以使用钩子,间接修改按钮上的文字
二、HOOK修改MessageBox按钮文本
// 定义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;
}
// 定义一个 MsgBox 函数
int MsgBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType)
{
HHOOK hMsgBoxHook = SetWindowsHookEx(WH_CBT, MsgBoxCBTProc, NULL, GetCurrentThreadId());
int ret = MessageBox(hWnd, lpText, lpCaption, uType);
UnhookWindowsHookEx(hMsgBoxHook);
return ret;
}
int WINAPI WinMain(HINSTANCE hinstance,
HINSTANCE hprevinstance,
LPSTR lpcmdline,
int ncmdshow)
{
//调用MsgBox
MsgBox(NULL,_T("helloworld?"),_T("IL&RL"),MB_ICONQUESTION | MB_YESNOCANCEL);
return 0;
}