WM_NCCREATE中的按钮等的CreateWindowEx lpParam

时间:2017-01-07 00:42:49

标签: winapi

我将指针传递给控件的类包装器实例指针作为lpParam参数,并在接收WN_NCCREATE时捕获它。

创建静态或按钮等控件(到目前为止)时,不会发送此消息。

所以我创建一个Window,一个静态和一个按钮,记录实例的指针,并且只有一个WN_NCCREATE消息与windows指针一起接收。

我的问题是:如何获取传递的参数?

在我几年前的一次尝试中,我使用了std::map hwnd -> ptr,效果很好。在这次尝试中,我试图深入了解WinAPI并尝试不同的方法。现在我对此感到困惑,到目前为止Google的搜索结果并没有多大帮助。

我应该坚持使用地图还是有另一种解决方案?

1 个答案:

答案 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?