2011-06-27 57 views
0

非客戶端控件事件都是默認由DefWindowProc控制的。我想創建我自己的自定義非客戶端控件;這導致我攔截了WM_NCPAINT味精,並可能創建我自己的句柄來控制非客戶區中的窗口。如果我要創建一個最小化或最大化按鈕,那麼我將不得不重新創建(從頭開始?)並攔截默認Windows過程假定要處理的所有事件,因爲我的自定義按鈕的大小,位置和屬性不是與默認的一樣。不過,我仍然不是很確定這是否是常見的方式讓人們創建自定義的是模仿默認的非客戶端控件的非客戶端控件,所以我要確保,如果我在正確的軌道上:Winapi:處理自定義和默認的非客戶端控件

  1. 待辦事項在默認的窗口樣式 沒有通過指定創建非客戶端的 控制(最小化的存在, 最大化,關閉按鈕)
  2. 非客戶區域內創建我自己的窗口控件( 如按鈕)
  3. 攔截所有與他們有關的消息 。如果自定義窗口是默認的一個 ,例如最小化 按鈕,那麼發送消息涉及到 那個按鈕? (不過,我只看到 WM_CLOSE消息,有沒有 WM_MINIMIZE或WM_MAXIMIZE)

我有處理所有默認程序的煩惱;如果可能的話,我想看看裏面有什麼DefWindowProc(所以我可以模仿他們的功能,同時加我的)

+0

爲了最小化和最大化,你可以分別使用帶'SW_MINIMIZE'和'SW_MAXIMIZE'參數的'ShowWindow()'函數嗎? –

回答

2

這聽起來,如果你想要的一切自定義。如果您絕對必須對您的用戶施加一些「噪音」,那麼只需將您的材料放在客戶區域,並且沒有任何非客戶區域(無邊框等)即可。你可能不得不實現窗口拖動,但我認爲就是這樣。

乾杯&心連心,

2

繪製自定義按鈕,其中的標題通常會放置它們。位置並不重要。在回調的WM_COMMAND部分,請使用ShowWindow(hwnd, SW_MAXIMIZE)ShowWindow(hwnd, SW_RESTORE)。這裏的所有都是它的。