第一章 第四小節Duilib的WindowImplBase基類(三)--四個接口

  在面向對象的世界裏,接口規範了類實現的功能,WindowImplBase基類在本小節開始的時候,就已經知道需要實現四個接口,分別是INotifyUI、 IMessageFilterUI、 IDialogBuilderCallback和IQueryControlText四個接口。如下所示:

    // Listener interface
    class INotifyUI
    {
    public:
        virtual void Notify(TNotifyUI& msg) = 0;
    };

  必須要實現這個消息通知函數。

    // MessageFilter interface
    class IMessageFilterUI
    {
    public:
        virtual LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled) = 0;
    };

  必須要實現這個消息過濾函數。

    class IDialogBuilderCallback
    {
    public:
        virtual CControlUI* CreateControl(LPCTSTR pstrClass) = 0;
    };

  創建控件函數。

    // 控件文字查詢接口
    class UILIB_API IQueryControlText
    {
    public:
        virtual LPCTSTR QueryControlText(LPCTSTR lpstrId, LPCTSTR lpstrType) = 0;
    };

  查詢文件接口。在C++裏,接口的類的使用應該需要有一定的瞭解。接下來分析在WindowImplBase基類中相應的實現。首先INotifyUI這個接口在上一小節講解CNotifyPump時,已經提到過,是消息分發的進入點。如下所示:

    void WindowImplBase::Notify(TNotifyUI& msg)
    {
        if (msg.sType == _T("windowinit"))
        {
            OnPrepare();
            return;
        }
        return CNotifyPump::NotifyPump(msg);
    }

  接着是消息過濾函數,如果大家對win32的效果流程有些瞭解,這個函數在消息循環消息處理之前被調用,如下所示:

    LRESULT WindowImplBase::MessageHandler(UINT uMsg, WPARAM wParam, LPARAM /*lParam*/, bool& /*bHandled*/)
    {
        if (uMsg == WM_KEYDOWN)
        {
            switch (wParam)
            {
            case VK_RETURN:
            case VK_ESCAPE:
                return ResponseDefaultKeyEvent(wParam);
            default:
                break;
            }
        }
        return FALSE;
    }

  接下來是創建控件函數,如下所示:

    CControlUI* WindowImplBase::CreateControl(LPCTSTR pstrClass)
    {
        return NULL;//沒有什麼操作
    }

  接下來是查詢文本的實現,如下所示:

    LPCTSTR WindowImplBase::QueryControlText(LPCTSTR lpstrId, LPCTSTR lpstrType)
    {
        return NULL;//沒有什麼操作
    }

  綜上所述,接口最重要的還是前面兩個接口,與消息傳遞有關。


  歡迎光臨知了軟件開發網絡平臺,本公司定製開發各類軟件,主要方向爲桌面專業軟件開發和插件定製開發,桌面軟件主要包括文字圖形識別類軟件,信息管理類軟件,3D打印類軟件,視頻類軟件以及其它涉及專業的各類圖形圖像處理軟件。插件包含AE插件,AI插件,PS插件,PDF插件,3DMAX插件以及Word,Excel等Office插件開發。詳情請諮詢,微信QQ:312117271,手機:18928899728,郵箱: [email protected].
公司網址:http://www.zhiliaos.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章