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

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

问题描述:

我有一个MFC应用程序,并且希望将此应用程序生成的所有弹出窗口作为对话框或使用AfxMessageBox应定位到配置文件中给出的某个位置。 MFC中有没有设置任何弹出窗口的默认位置?如何在MFC中更改弹出窗口的默认位置

在此先感谢

+1

不是我所知道的。如果我要实现这一点,我会使用钩子检测基于对话框的窗口的显示,并在显示它们之前设置它们的位置。 – user1793036 2014-08-28 08:03:20

使用窗口挂钩过程很容易完成。在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; 
    } 
} 

呼叫InstallHookInitInstance,然后UninstallHook

,请参阅本SO帖子:Hooking window creation in an MFC program

示例代码。

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