2008-12-24 77 views
3

我想用MFC自繪一個窗口的標題欄。所以我重寫了CMainFrame的OnNcPaint()方法。一切似乎都沒問題,直到我點擊控制菜單中的項目以使其最小化或最大化。在最小化或最大化過程中,我可以看到原始標題欄出現。我不知道爲什麼會發生這種情況。也許有一些消息我沒有在這個過程中處理?需要你的幫助。非常感謝!在窗口最小化或最大化的過程中處理什麼信息?

回答

0

您可以使用Spy ++查看窗口收到的消息。我對OnSize的模糊記憶早於我預期的一些消息。

2

期間最小化/最大化過程?聽起來像最小/最大動畫。您可以通過「我的電腦」>「屬性」>「高級」>(性能)設置禁用動畫來驗證此情況。

至於標題問題,你會得到WM_SIZE。看看CWnd::OnSize的文檔。

CMyDialog::OnSize(UINT nType, int cx, int cy) 
{ 
    switch (nType) 
    { 
     case SIZE_MAXIMIZED: 
      // window was maximized 
      break; 

     case SIZE_MINIMIZED: 
      // window was minimized 
      break; 

     case SIZE_RESTORED: 
      // misleading - this occurs when restored from minimized/maximized AND 
      // for normal size operations when already restored 
      break; 

     default: 
      // you could also deal with SIZE_MAXHIDE and SIZE_MAXSHOW 
      // but rarely need to 
      break; 
    } 
} 
0

之前調用了OnShow。篩上部分被稱爲後..
我覺得值是SW_MAXIMIZESW_MINIMIZE ..

還有一個辦法讓它這樣你的應用程序不關心Windows中的動畫設置。
當最小化時,將您的應用程序添加到系統托盤中是一個有意思的事情,它非常適合於繪製。我使用它已經有好幾年了,但如果你能找到它,你就會變成金。

0

你說的是窗口動畫,對吧?窗口顯示從目前的大小和位置「增長」或「收縮」到最大化的大小或任務欄。

該動畫獨立於窗口的外觀執行。您可以撥打DrawAnimatedRects API function自行觸發動畫。它只是根據當前的顯示設置繪製一個正常的標題欄。

請注意,具有自定義繪製標題欄的其他窗口的行爲方式相同。例如,看看Office的各種版本。在最小化或最大化時,繪製Windows標題欄,而不是客戶標題欄。調整不佔用全屏幕的窗口時,您也可以看到異常現象。例如,當最大化Hearts遊戲時,動畫顯示窗口擴展到整個屏幕的寬度,但是當動畫結束時,窗口變窄(但仍然是最大化)。

所以,回答你的問題,沒有消息發送。調整大小的動畫是由窗口管理器執行的,沒有任何協助或參與調整窗口的大小。就您的程序而言,窗口直接從其原始大小變爲新的大小。