c – 设置MessageBox的位置?
发布时间:2020-12-16 03:09:27 所属栏目:百科 来源:网络整理
导读:我想使用MessageBox(或类似的)打印出一条消息.我也想控制框出现在屏幕上,但在MessageBox的描述中可以找到任何东西,可以让您控制位置.我错过了什么?如果MessageBox不能使用,那么还有其他选择吗? 由于太复杂的原因进入这里,我更喜欢一个答案,它不涉及自己的
我想使用MessageBox(或类似的)打印出一条消息.我也想控制框出现在屏幕上,但在MessageBox的描述中可以找到任何东西,可以让您控制位置.我错过了什么?如果MessageBox不能使用,那么还有其他选择吗?
由于太复杂的原因进入这里,我更喜欢一个答案,它不涉及自己的窗口并传递一个回调函数的地址. 解决方法
步骤1:创建一个CBT钩子来捕获消息框的创建:
// global hook procedure HHOOK hhookCBTProc = 0; LRESULT CALLBACK pfnCBTMsgBoxHook(int nCode,WPARAM wParam,LPARAM lParam) { if (nCode == HCBT_CREATEWND) { CREATESTRUCT *pcs = ((CBT_CREATEWND *)lParam)->lpcs; if ((pcs->style & WS_DLGFRAME) || (pcs->style & WS_POPUP)) { HWND hwnd = (HWND)wParam; // At this point you have the hwnd of the newly created // message box that so you can position it at will SetWindowPos(hwnd,...); } } return (CallNextHookEx(hhookCBTProc,nCode,wParam,lParam)); } 步骤2:显示消息框之前和之后安装/删除挂钩: // set hook to center the message box that follows hhookCBTProc = SetWindowsHookEx(WH_CBT,pfnCBTMsgBoxHook,GetCurrentThreadId()); int sResult = MessageBox(hwndParent,pszMsg,pszTitle,usStyle); // remove the hook UnhookWindowsHookEx(hhookCBTProc); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |