2013-01-04 28 views
1

我正在開發與WINAPI的GUI,我有一個問題。 我製作了一個自定義進度條,其中包含處理消息的相應步驟。 我自己畫進度條。對於進度條百分比,我使用一個靜態變量,使用自定義消息進行更新,然後使用InvalidateRect重新繪製進度條。 現在我怎麼能優化我的代碼,所以我可以創建ProgressBar類的多個窗口。 問題是,我不能對它們全部使用相同的靜態百分比變量!所以每個實例都應該有自己的百分比變量。Winapi多窗口相同的WindowProc

謝謝

回答

3

所有的窗戶都可以使用你喜歡的任何目的,至少一個指針大小的用戶數據變量 - 它通過GetWindowLongPtr/SetWindowLongPtr與索引訪問GWLP_USERDATA

此外,當您註冊窗口類時,您可以使用WNDCLASS成員cbWndExtra指定要爲班級中的每個窗口分配的其他用戶數據。例如,如果在註冊課程時將其設置爲sizeof(DWORD_PTR),則還可以使用索引爲0的SetWindowLongPtr來存儲DWORD_PTR大小的值。

取決於您希望每個窗口存儲多少數據,你可以使用上面的方法直接存儲它,或者分配你自己的結構並存儲一個指針(當窗口被銷燬時記住釋放數據)。

另一種按窗口存儲數據的方法是使用通過SetPropGetProp函數的窗口屬性,這些函數允許您存儲一個或多個指針大小的名稱/值對。

+0

這也是我使用的,工作可靠。 – Damon

+0

這就是我正在尋找的!謝謝! – gekod

0

不要讓百分比變量爲靜態。從的getter/setter方法使其成爲類的一部分和讀/寫

+0

嗨我使用C而不是C++,所以我不編程OO – gekod