2010-01-21 92 views
1

我有一個運行在Win7中的沒有Titlebar的MFC應用程序(即我的標題欄是自制的,具有用於還原,最大化和關閉的自定義按鈕)。在Win7中,當用戶將窗口拖到屏幕的頂部時,它響應Win 7 API生成的最大化事件。但是,一旦最大化,我無法捕獲用戶將窗口從頂部拖動時發生的還原事件。如何在最大化窗口上處理拖動事件

我在雙擊時處理還原,我處理還原時單擊還原按鈕,但拖動我無法檢測到。

我會想象它看起來類似於:

if (message == WM_WINDOWPOSCHANGING) 
{ 
    // DETECT RESTORE MSG HERE. 
} 

但是,這似乎並沒有抓住它。就好像某個地方我已經禁止在窗戶最大化時移動窗戶。

有沒有辦法阻止WM_RESIZE?如何處理拖動事件以啓用自動調整大小?

回答

0

我發現,由於該應用程序沒有Titlebar,因此win7不處理窗口拖動,因此根本不發送WM_SYSCOMMAND。換句話說,應用程序阻止Titlebar拖動,因爲有沒有標題欄拖動。

該解決方案部分是爲了檢測我們的模擬標題欄上的拖動。之後,窗口必須僅在SIZE中恢復,而不是在位置上。該位置需要對光標是動態的,就像Win7一樣。想法,人?

1

當鼠標位於自定義標題欄上時,您是否嘗試過處理返回HTCAPTION(titlebar)的WM_NCHITTEST消息,從而允許在沒有任何進一步定製的情況下進行正常的窗口處理?

+0

我會試試!謝謝! – 2010-01-22 15:00:34

+0

這不起作用,因爲我們的虛假標題欄實際上是一個功能區(來自CWnd)。當我捕獲命中測試並返回它是一個HTCaption時,然後將功能區拖到主框架周圍並剪切到窗口邊緣。 :( – 2010-01-22 20:16:06

+0

那麼這是不幸的,我唯一的想法是改變用戶界面以允許從主窗口顯示「拖拽區域」 - 然後WM_NCHITTEST就可以工作 - 類似於Chrome的工作方式 – Ruddy 2010-01-22 20:39:25