在面向對象的世界裏,接口規範了類實現的功能,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