我想使用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)); }
// 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);