我有一个MFC应用程序,我想要将此应用程序生成的所有弹出窗口作为对话框或使用AfxMessageBox定位到配置文件中给出的某个位置。 MFC中有没有办法为任何弹出窗口设置默认位置?
提前致谢
答案 0 :(得分:2)
使用窗口挂钩程序轻松完成。
请参阅此SO帖子:Hooking window creation in an MFC program
示例代码:
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
中的ExitInstance
(真的不是必需的)。
此示例挂钩程序将所有弹出窗口移动到左上角。