深入浅出MFC-侯俊杰
■ MFC 程序的初始化過程
■ RTTI(Runtime Type Information)執行時期型別信息
DECLARE_DYNAMIC?
struct CRuntimeClass
{
// Attributes
?? ?LPCSTR m_lpszClassName;
?? ?int m_nObjectSize;
?? ?UINT m_wSchema; // schema number of the loaded class
?? ?CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class
#ifdef _AFXDLL
?? ?CRuntimeClass* (PASCAL* m_pfnGetBaseClass)();
#else
?? ?CRuntimeClass* m_pBaseClass;
#endif
// Operations
?? ?CObject* CreateObject();
?? ?BOOL IsDerivedFrom(const CRuntimeClass* pBaseClass) const;
?? ?// dynamic name lookup and creation
?? ?static CRuntimeClass* PASCAL FromName(LPCSTR lpszClassName);
?? ?static CRuntimeClass* PASCAL FromName(LPCWSTR lpszClassName);
?? ?static CObject* PASCAL CreateObject(LPCSTR lpszClassName);
?? ?static CObject* PASCAL CreateObject(LPCWSTR lpszClassName);
// Implementation
?? ?void Store(CArchive& ar) const;
?? ?static CRuntimeClass* PASCAL Load(CArchive& ar, UINT* pwSchemaNum);
?? ?// CRuntimeClass objects linked together in simple list
?? ?CRuntimeClass* m_pNextClass; ? ? ? // linked list of registered classes
?? ?const AFX_CLASSINIT* m_pClassInit;
};
?
■ Dynamic Creation 動態生成
?DECLARE_DYNCREATE
■ Persistence 永續留存
■ Message Mapping 消息映射
?消息映射表作法,把消息和其處理例程關聯起來,將消息與表格中的元素比對,然后
調用對應的處理例程,這種動作我們也稱之為消息映射(Message Mapping)。
注意:CWinThread 并不屬于消息流動網的一份,父類消息映射表填CCmdTarget
■ Message Routing 消息繞行
?3. MFC的生死因果
注意:應用程序一定要改寫虛擬函數InitInstance,因為它在CWinApp 中只是個空函數,
沒有任何內建(預設)動作 ;
CFrameWnd::Create 在產生窗口之前,會先引發窗口類別的注冊動作
請注意,如果類別的成員函數是一個callback 函數, 你必須聲明它為"static",才能把
C++ 編譯器加諸于函數的一個隱藏參數this 去掉(請看方塊批注)。?
Application framework classes
這一部份最為人認知的便是Document/View,這也是使MFC 躋身application framework 的關鍵。Document/View 的觀念是希望把資料的本體,和資料的顯像分開處理。由于文 件產生之際,必須動態生成Document/View/Frame 三種對象,所以又必須有所謂的 Document Template 管理之。
■ CDocTemplate、CSingleDocTemplate、CMultiDocTemplate - Document Template 扮演 黏膠的角色,把Document 和View 和其Frame(外框窗口)膠黏在一塊兒。
■ CSingleDocTemplate 一次只支持一種文件類型,CMultiDocTemplate 可同時支持多 種文件類型。注意,這和MDI 程序或SDI 程序無關,換句話說,MDI 程序 也可以使用CSingleDocTemplate,SDI 程序也可以使用CMultiDocTemplate。
總結
以上是生活随笔為你收集整理的深入浅出MFC-侯俊杰的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2602):什么是跨域请求和跨
- 下一篇: 破解软件下载网站100个