gpt4 book ai didi

c++ - 设置 MessageBox 的位置?

转载 作者:可可西里 更新时间:2023-11-01 16:28:28 30 4
gpt4 key购买 nike

我想使用 MessageBox(或类似工具)打印消息。我还想控制框出现在屏幕上的确切位置,但在 MessageBox 的描述中找不到任何允许您控制位置的内容。我错过了什么?如果不能使用 MessageBox,那么有没有替代方案?

由于过于复杂的原因无法在此处展开​​,我更喜欢不涉及制作我自己的窗口和传递回调函数地址的答案。

最佳答案

第 1 步:创建一个 CBT Hook 来捕获消息框的创建:

// 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 步:在显示消息框之前和之后安装/删除钩子(Hook):

// set hook to center the message box that follows
hhookCBTProc = SetWindowsHookEx(WH_CBT,
pfnCBTMsgBoxHook,
0, GetCurrentThreadId());

int sResult = MessageBox(hwndParent, pszMsg, pszTitle, usStyle);

// remove the hook
UnhookWindowsHookEx(hhookCBTProc);

关于c++ - 设置 MessageBox 的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1530561/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com