【发布时间】:2019-04-08 14:47:14
【问题描述】:
我正在尝试用 C++ 编写我的第一个 Windows 桌面应用程序,但我对此很陌生,我不知道应该如何跟踪子窗口的窗口句柄。
我遇到了一些丢失窗口句柄的问题,例如:
当接受来自多个跟踪栏的WM_HSCROLL 消息时,特定的跟踪栏由 lParam 在消息中标识,其中包含跟踪栏窗口的句柄......但如果我不存储我的窗口句柄,那么我不会'不知道消息来自哪个轨迹栏!
我应该将它们存储在全局变量中吗?这似乎不太安全。
我应该创建一个结构或类来包装父窗口并存储窗口句柄等重要变量吗?如果是这样,我将如何处理?
【问题讨论】:
-
也许将你的窗口包装在一个类中。
-
我应该将它们存储在全局变量中吗?这似乎不太安全。全局变量通常不是一个好的选择。
-
@drescherjm 不同意你所有的三个 cmets。
-
无处可去。所有窗口句柄都可以通过 GetDlgItem() 和类似的函数遍历。您主要希望保存顶级窗口或使用
GWLP_USERDATA和SetWindowLongPtr()。 -
您可以将任意数据与窗口句柄
SetWindowLongPtr(win, GWLP_USERDATA, ptr)相关联。例如,您可以存储一个指向表示该窗口的 C++ 对象的指针。