我将指针传递给控件的类包装器实例指针作为lpParam
参数,并在接收WN_NCCREATE
时捕获它。
创建静态或按钮等控件(到目前为止)时,不会发送此消息。
所以我创建一个Window,一个静态和一个按钮,记录实例的指针,并且只有一个WN_NCCREATE
消息与windows指针一起接收。
我的问题是:如何获取传递的参数?
在我几年前的一次尝试中,我使用了std::map hwnd -> ptr
,效果很好。在这次尝试中,我试图深入了解WinAPI并尝试不同的方法。现在我对此感到困惑,到目前为止Google的搜索结果并没有多大帮助。
我应该坚持使用地图还是有另一种解决方案?
答案 0 :(得分:1)
要执行您尝试的操作,您可以执行以下操作:
致电GetClassInfo()
/ GetClassInfoEx()
,获取您要尝试换行的预先存在的类的默认WNDCLASS
/ WNDCLASSEX
注册详细信息,例如{ {1}}。
将BUTTON
字段更改为指向您自己的窗口消息处理程序,并将WNDCLASS::lpfnWndProc
字段更改为您自己的自定义类名。根据需要更改任何其他WNDCLASS::lpszClassName
字段。
使用修改后的WNDCLASS
致电RegisterClass()
/ RegisterClassEx()
。
现在,您可以使用自定义类名称调用WNDCLASS/EX
,所有创建消息(包括CreateWindow/Ex()
)都将通过您的窗口消息处理程序。
这就是Embarcadero的VCL框架是标准Windows控件的子类。
另见:How can I make a WNDPROC or DLGPROC a member of my C++ class?。