Winapi多个Windows相同的WindowProc

时间:2013-01-04 09:48:22

标签: c winapi

我正在使用WINAPI开发GUI,我有一个问题。 我创建了一个自定义进度条,其中包含处理其消息的相应过程。 我自己画进度条。对于进度条百分比,我使用静态变量,我使用自定义消息更新,然后使用InvalidateRect重新绘制进度条。 现在我如何优化我的代码,以便创建ProgressBar类的多个窗口。 问题是我无法为所有这些使用相同的静态百分比变量!所以每个实例都应该拥有自己的百分比变量。

谢谢

2 个答案:

答案 0 :(得分:3)

所有窗口都至少有一个指针大小的用户数据变量,您可以将其用于任何您喜欢的目的 - 可以通过GetWindowLongPtr / SetWindowLongPtr使用索引GWLP_USERDATA访问它。 / p>

此外,当您注册窗口类时,您可以使用WNDCLASS成员cbWndExtra指定要为您的班级中的每个窗口分配的其他用户数据。例如,如果在注册类时将其设置为sizeof(DWORD_PTR),则还可以使用索引为0的SetWindowLongPtr存储DWORD_PTR大小的值。

根据每个窗口要存储的数据量,您可以使用上述方法直接存储它,或者分配您自己的结构并存储指向它的指针(记住在窗口被销毁时释放数据)。

每个窗口存储数据的另一种方法是通过SetPropGetProp函数使用窗口属性,这样可以存储一个或多个指针大小的名称/值对。

答案 1 :(得分:0)

不要将百分比变量设为静态。使其成为类的一部分并从getter / setters读/写