如何更改MFC中弹出窗口的默认位置

How to change default position of pop-up window in MFC

本文关键字:窗口 默认 位置 何更改 MFC      更新时间:2023-10-16

我有一个MFC应用程序,我希望该应用程序作为对话框或使用AfxMessageBox生成的所有弹出窗口都应该定位到配置文件中给定的某个位置。MFC中有没有一种方法可以设置任何弹出窗口的默认位置?

提前感谢

使用窗口挂钩过程即可轻松完成。

请参阅这篇SO文章:在MFC程序中创建挂钩窗口

样本代码:

static HHOOK g_myHook = NULL;
LRESULT CALLBACK MyCbtHook(int nCode, WPARAM wParam, LPARAM lParam)
{
    switch (nCode)
    {
        case HCBT_ACTIVATE:
        {
            CWnd* wnd = CWnd::FromHandle((HWND)wParam);
            WINDOWINFO wi;
            wi.cbSize = sizeof(wi);
            wnd->GetWindowInfo(&wi);
            if ((wi.dwStyle & WS_POPUPWINDOW) == WS_POPUPWINDOW)
            {
                wnd->SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
            }
            break;
        }
    }
    return CallNextHookEx(0, nCode, wParam, lParam);
}
static void InstallHook()
{
    g_myHook = SetWindowsHookEx(WH_CBT, MyCbtHook, 0, GetCurrentThreadId());
}
static void UninstallHook()
{
    if (g_myHook)
    {
        UnhookWindowsHookEx(g_myHook);
        g_myHook = NULL;
    }
}

InitInstance调用InstallHook,然后在ExitInstance调用UninstallHook(实际上不是必需的)。

此示例挂钩程序将所有弹出窗口移动到左上角。