ZBLOG

完整示例

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

// 主窗口类
class CMainWnd : public WindowImplBase {
public:
    static CMainWnd* s_pMainWnd;

    virtual LPCTSTR GetWindowClassName() const override {
        return _T("CMainWnd");
    }

    virtual CDuiString GetSkinFolder() override {
        return _T("");
    }

    virtual CDuiString GetSkinFile() override {
        return _T("main.xml"); // 主窗口布局文件
    }

    virtual void InitWindow() override {
        s_pMainWnd = this;
        // 其他初始化操作...
    }

    LRESULT HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) {
        switch (uMsg) {
            case WM_MY_MESSAGE:
                // 处理自定义消息
                break;
            // 其他消息处理...
        }
        return __super::HandleCustomMessage(uMsg, wParam, lParam);
    }
};

CMainWnd* CMainWnd::s_pMainWnd = nullptr;

// 子窗口类
class CSubWnd : public WindowImplBase {
public:
    virtual LPCTSTR GetWindowClassName() const override {
        return _T("CSubWnd");
    }

    virtual CDuiString GetSkinFolder() override {
        return _T("");
    }

    virtual CDuiString GetSkinFile() override {
        return _T("sub.xml"); // 子窗口布局文件
    }

   void SendMessageToMainWindow(WPARAM wParam, LPARAM lParam) {
       if (CMainWnd::s_pMainWnd) {
           CMainWnd::s_pMainWnd->SendMessage(WM_MY_MESSAGE, wParam, lParam);
       }
   }
};

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow) {
    // 初始化Duilib
    CPaintManagerUI::SetInstance(hInstance);
    CPaintManagerUI::InitResourceCallback(MakeDelegate(&OnLoadResourceCallback));
    
    // 创建主窗口对象
    CMainWnd mainWnd;
    
    // 创建子窗口对象
    CSubWnd subWnd;

    // 显示主窗口和子窗口
    mainWnd.Create(NULL, _T("Main Window"), UI_WNDSTYLE_FRAME, WS_EX_WINDOWEDGE);
    subWnd.Create(mainWnd.GetHWND(), _T("Sub Window"), UI_WNDSTYLE_CHILD | WS_VISIBLE);

    // 进入消息循环
	MSG msg = { 0 };
	while (::GetMessage(&msg, NULL, 0, 0)) {
		if (!CPaintManagerUI::TranslateMessage(&msg)) {
			::TranslateMessage(&msg);
			::DispatchMessage(&msg);
		}
	}

	return static_cast<int>(msg.wParam);
}

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?