通過WM_NCCALCSIZE消息消除閃爍
在前面的幾個章節中,我們深入地瞭解了WM_NCCALCSIZE這一消息的內部細節。通過使用這一消息,我們可以在窗口的大小調整代碼中消除窗口的閃爍。我們只需要將之前的編程技巧應用到我們的滾動條程序中。
首先,我們需要在窗口調整大小的代碼中消除閃爍的現象,我們先將[OnWindowPosChanging]函數恢復成如下的版本:
接下來,我們將會在WM_NCCALCSIZE消息處理例程中做如下的修改:
在上面的代碼中,我們提取出了一個幫助函數[ClampScrollPos],它的實現代碼來源於[ScrollTo]這個函數(如果我們計劃的周詳一點,這個函數功能早就應該在我們第一次實現ScrollTo時被抽離出來)。
不過,我對以上的代碼並不是十分滿意。我個人認為,WM_NCCALCSIZE消息應該是無狀態的。但是,你會觀察到,通過調用ScrollTo,WM_NCCALCSIZE消息的處理例程修改了滾動條的狀態。如果我有足夠的時間,我應該會將狀態的修改代碼移動到WM_WINDOWPOSCHANGING消息處理例程中,這樣吧,就把這個問題作為另一個練習題吧。
練習題
請將WM_NCCALCSIZE消息處理例程修改為無狀態版本。
閱讀更多 漫漫開發路 的文章