日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

第十五篇:在SOUI中消息通讯

發布時間:2023/12/13 综合教程 23 生活家
生活随笔 收集整理的這篇文章主要介紹了 第十五篇:在SOUI中消息通讯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SOUI是一套基于Win32 SDK的窗口開發的一套DirectUI框架。在SOUI中除了有真窗口使用窗口消息通訊機制外,還有SOUI控件之間的通訊,及控件的事件處理等。

1、真窗口消息通訊

因此可以使用::SendMessage這個API來與宿主窗口通訊。在任意一個地方只要獲取到了SOUI的宿主窗口句柄就可以向該窗口發消息。

發消息以后可以在主界面的真窗口的消息映射表中響應各種自定義消息(如下):

#define WM_MYMSG (WM_USER+100)
    LRESULT OnMyMsg(UINT uMsg,WPARAM wp,LPARAM lp,BOOL & bHandled)
    {
        return 0;
    }
    //HOST消息及響應函數映射表
    BEGIN_MSG_MAP_EX(CMainDlg)
        MESSAGE_HANDLER(WM_MYMSG,OnMyMsg)
        MSG_WM_CREATE(OnCreate)
        MSG_WM_INITDIALOG(OnInitDialog)
        MSG_WM_DESTROY(OnDestory)
        MSG_WM_CLOSE(OnClose)
        MSG_WM_SIZE(OnSize)
        MSG_WM_COMMAND(OnCommand)
        MSG_WM_SHOWWINDOW(OnShowWindow)
        CHAIN_MSG_MAP(SHostWnd)
        REFLECT_NOTIFICATIONS_EX()
    END_MSG_MAP()

注意上面代碼的紅色部分。有WTL開發經驗的朋友應該已經看出來了,SOUI處理真窗口消息的形式和WTL完全一樣。

2、SOUI控件通訊

我們知道,在win32編譯中,要與一個控件(窗口)通訊能用SendMessage(PostMessage)發送一個消息給目標窗口,目標窗口收到后進行處理。那么問題來了,如何向一個SOUI窗口發消息?

SOUI的窗口類和MFC的窗口類很像,和MFC使用SendMessage(PostMessage)發消息類似,在SOUI中也可以使用SWindow::SSendMessage來向目標窗口發送一個消息來通訊,但不支持PostMessage,目標窗口在SOUI窗口的消息映射表中響應發送過來的消息。下面是一個內置控件STabCtrl的消息映射表:

        SOUI_MSG_MAP_BEGIN()
            MSG_WM_PAINT_EX(OnPaint)
            MSG_WM_DESTROY(OnDestroy)
            MSG_WM_LBUTTONDOWN(OnLButtonDown)
            MSG_WM_MOUSEMOVE(OnMouseMove)
            MSG_WM_MOUSELEAVE(OnMouseLeave)
            MSG_WM_KEYDOWN(OnKeyDown)
        SOUI_MSG_MAP_END()

和真窗口的映射表使用WTL的映射宏不一樣,SOUI窗口的映射宏使用SOUI_MSG_MAP_BEGIN 和SOUI_MSG_MAP_END來構造消息處理函數,但是映射表中的消息映射項基本和WTL的映射形式是一樣的(注意個別消息是經過重定義的,典型的如WM_PAINT消息,在SOUI中需要使用MSG_WM_PAINT_EX來處理)。

3、SOUI的事件機制

此外SOUI中控件要發出事件交給應用層處理使用的是一套事件機制。

每一個事件有對應一個EventArg類,事件在控件中使用FireEvent啟動事件路由,應用程序可以在事件響應映射表中對各種事件統一處理,也可以使用subscribeEvent來直接訂閱特定SOUI窗口的一個事件,直接將事件與事件處理函數關聯。這一部分請參考前面相關章節。

總結

以上是生活随笔為你收集整理的第十五篇:在SOUI中消息通讯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。