滾動條第12章節: 在我們的例子程序中添加WM

通過WM_NCCALCSIZE消息消除閃爍

在前面的幾個章節中,我們深入地瞭解了WM_NCCALCSIZE這一消息的內部細節。通過使用這一消息,我們可以在窗口的大小調整代碼中消除窗口的閃爍。我們只需要將之前的編程技巧應用到我們的滾動條程序中。

首先,我們需要在窗口調整大小的代碼中消除閃爍的現象,我們先將[OnWindowPosChanging]函數恢復成如下的版本:

滾動條第12章節: 在我們的例子程序中添加WM_NCCALCSIZE消息

接下來,我們將會在WM_NCCALCSIZE消息處理例程中做如下的修改:

滾動條第12章節: 在我們的例子程序中添加WM_NCCALCSIZE消息

在上面的代碼中,我們提取出了一個幫助函數[ClampScrollPos],它的實現代碼來源於[ScrollTo]這個函數(如果我們計劃的周詳一點,這個函數功能早就應該在我們第一次實現ScrollTo時被抽離出來)。

滾動條第12章節: 在我們的例子程序中添加WM_NCCALCSIZE消息

不過,我對以上的代碼並不是十分滿意。我個人認為,WM_NCCALCSIZE消息應該是無狀態的。但是,你會觀察到,通過調用ScrollTo,WM_NCCALCSIZE消息的處理例程修改了滾動條的狀態。如果我有足夠的時間,我應該會將狀態的修改代碼移動到WM_WINDOWPOSCHANGING消息處理例程中,這樣吧,就把這個問題作為另一個練習題吧。

練習題

請將WM_NCCALCSIZE消息處理例程修改為無狀態版本。


滾動條第12章節: 在我們的例子程序中添加WM_NCCALCSIZE消息


分享到:


相關文章: