2013-01-01 62 views
1

我必須使用Windows窗體創建自定義邊框窗口。目前我正在使用WM_NCCALSIZE來修改邊框的大小,而WM_NCPAINT用於自定義繪圖。 我意識到,當我在處理WM_NCCALSIZE消息時不調用基WndProc時,滾動條將不會被繪製。 那麼,如果手動處理WM_NCCALSIZE,我可以擁有一個原生的普通滾動條嗎?我該怎麼做?自定義邊框Windows窗體和滾動條可見性

+0

是的,我可以。但我在互聯網上搜索過,沒有人叫基地方法。當我們這樣做時,我不知道它是否會造成開銷或其他問題? – binhnx218

+2

這實際上取決於基本實現與WM_NCCALCSIZE做什麼,但我懷疑你應該看到任何可衡量的效果。如果它給你想要的結果,那就去吧:) – Rotem

+0

謝謝。雖然我真的想要一個不需要調用基本方法的解決方案(它只調用本地DefWndProc過程),但我認爲這是一個可接受的解決方案。 你可以寫你的評論作爲答案,我會接受它:) – binhnx218

回答

1

你可以做的是首先調用base.WndProc(ref m)然後處理消息來修改邊框的大小。

protected override void WndProc(ref Message m) 
{ 
    switch (m.Msg) 
    { 
     ... 
     case WM_NCCALCSIZE: 
     { 
      base.WndProc(ref m); 
      //Work your magic... 
     } 
     default: base.WndProc(ref m); 
    } 
}