2014-08-28 116 views
1

我有一個MFC應用程序,並且希望將此應用程序生成的所有彈出窗口作爲對話框或使用AfxMessageBox應定位到配置文件中給出的某個位置。 MFC中有沒有設置任何彈出窗口的默認位置?如何在MFC中更改彈出窗口的默認位置

在此先感謝

+1

不是我所知道的。如果我要實現這一點,我會使用鉤子檢測基於對話框的窗口的顯示,並在顯示它們之前設置它們的位置。 – user1793036 2014-08-28 08:03:20

回答

2

使用窗口掛鉤過程很容易完成。在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

示例代碼。

此示例鉤子程序將所有彈出窗口移動到左上角。

相關問題