如何在MFC中更改弹出窗口的默认位置
问题描述:
我有一个MFC应用程序,并且希望将此应用程序生成的所有弹出窗口作为对话框或使用AfxMessageBox应定位到配置文件中给出的某个位置。 MFC中有没有设置任何弹出窗口的默认位置?如何在MFC中更改弹出窗口的默认位置
在此先感谢
答
使用窗口挂钩过程很容易完成。在ExitInstance
(不需要真的)
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;
}
}
呼叫InstallHook
在InitInstance
,然后UninstallHook
:
,请参阅本SO帖子:Hooking window creation in an MFC program
示例代码。
此示例钩子程序将所有弹出窗口移动到左上角。
不是我所知道的。如果我要实现这一点,我会使用钩子检测基于对话框的窗口的显示,并在显示它们之前设置它们的位置。 – user1793036 2014-08-28 08:03:20