ZBLOG

完整示例

以下是一个使用Duilib多重子窗口向主窗口发送消息的完整示例:

  1. // 主窗口类
  2. class CMainWnd : public WindowImplBase {
  3. public:
  4. static CMainWnd* s_pMainWnd;
  5. virtual LPCTSTR GetWindowClassName() const override {
  6. return _T("CMainWnd");
  7. }
  8. virtual CDuiString GetSkinFolder() override {
  9. return _T("");
  10. }
  11. virtual CDuiString GetSkinFile() override {
  12. return _T("main.xml"); // 主窗口布局文件
  13. }
  14. virtual void InitWindow() override {
  15. s_pMainWnd = this;
  16. // 其他初始化操作...
  17. }
  18. LRESULT HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) {
  19. switch (uMsg) {
  20. case WM_MY_MESSAGE:
  21. // 处理自定义消息
  22. break;
  23. // 其他消息处理...
  24. }
  25. return __super::HandleCustomMessage(uMsg, wParam, lParam);
  26. }
  27. };
  28. CMainWnd* CMainWnd::s_pMainWnd = nullptr;
  29. // 子窗口类
  30. class CSubWnd : public WindowImplBase {
  31. public:
  32. virtual LPCTSTR GetWindowClassName() const override {
  33. return _T("CSubWnd");
  34. }
  35. virtual CDuiString GetSkinFolder() override {
  36. return _T("");
  37. }
  38. virtual CDuiString GetSkinFile() override {
  39. return _T("sub.xml"); // 子窗口布局文件
  40. }
  41. void SendMessageToMainWindow(WPARAM wParam, LPARAM lParam) {
  42. if (CMainWnd::s_pMainWnd) {
  43. CMainWnd::s_pMainWnd->SendMessage(WM_MY_MESSAGE, wParam, lParam);
  44. }
  45. }
  46. };
  47. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow) {
  48. // 初始化Duilib
  49. CPaintManagerUI::SetInstance(hInstance);
  50. CPaintManagerUI::InitResourceCallback(MakeDelegate(&OnLoadResourceCallback));
  51. // 创建主窗口对象
  52. CMainWnd mainWnd;
  53. // 创建子窗口对象
  54. CSubWnd subWnd;
  55. // 显示主窗口和子窗口
  56. mainWnd.Create(NULL, _T("Main Window"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
  57. subWnd.Create(mainWnd.GetHWND(), _T("Sub Window"), UI_WNDSTYLE_CHILD | WS_VISIBLE);
  58. // 进入消息循环
  59. MSG msg = { 0 };
  60. while (::GetMessage(&msg, NULL, 0, 0)) {
  61. if (!CPaintManagerUI::TranslateMessage(&msg)) {
  62. ::TranslateMessage(&msg);
  63. ::DispatchMessage(&msg);
  64. }
  65. }
  66. return static_cast<int>(msg.wParam);
  67. }

在这个示例中,我们定义了一个CMainWnd类作为主窗口,另外创建了一个CSubWnd类作为子窗口。在子窗口类中,通过静态指针变量s_pMainWnd获取主窗口对象,并调用其SendMessage()函数向主窗口发送自定义消息。在主窗口类中,重写了消息处理函数HandleCustomMessage()来处理自定义消息。

请注意,在实际使用时,你需要根据你的布局文件和具体需求进行相应的修改和补充。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=18070

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?