深入浅出MFC-侯俊杰
■ MFC 程序的初始化過程
■ RTTI(Runtime Type Information)執(zhí)行時(shí)期型別信息
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 動(dòng)態(tài)生成
?DECLARE_DYNCREATE
■ Persistence 永續(xù)留存
■ Message Mapping 消息映射
?消息映射表作法,把消息和其處理例程關(guān)聯(lián)起來,將消息與表格中的元素比對(duì),然后
調(diào)用對(duì)應(yīng)的處理例程,這種動(dòng)作我們也稱之為消息映射(Message Mapping)。
注意:CWinThread 并不屬于消息流動(dòng)網(wǎng)的一份,父類消息映射表填CCmdTarget
■ Message Routing 消息繞行
?3. MFC的生死因果
注意:應(yīng)用程序一定要改寫虛擬函數(shù)InitInstance,因?yàn)樗贑WinApp 中只是個(gè)空函數(shù),
沒有任何內(nèi)建(預(yù)設(shè))動(dòng)作 ;
CFrameWnd::Create 在產(chǎn)生窗口之前,會(huì)先引發(fā)窗口類別的注冊(cè)動(dòng)作
請(qǐng)注意,如果類別的成員函數(shù)是一個(gè)callback 函數(shù), 你必須聲明它為"static",才能把
C++ 編譯器加諸于函數(shù)的一個(gè)隱藏參數(shù)this 去掉(請(qǐng)看方塊批注)。?
Application framework classes
這一部份最為人認(rèn)知的便是Document/View,這也是使MFC 躋身application framework 的關(guān)鍵。Document/View 的觀念是希望把資料的本體,和資料的顯像分開處理。由于文 件產(chǎn)生之際,必須動(dòng)態(tài)生成Document/View/Frame 三種對(duì)象,所以又必須有所謂的 Document Template 管理之。
■ CDocTemplate、CSingleDocTemplate、CMultiDocTemplate - Document Template 扮演 黏膠的角色,把Document 和View 和其Frame(外框窗口)膠黏在一塊兒。
■ CSingleDocTemplate 一次只支持一種文件類型,CMultiDocTemplate 可同時(shí)支持多 種文件類型。注意,這和MDI 程序或SDI 程序無關(guān),換句話說,MDI 程序 也可以使用CSingleDocTemplate,SDI 程序也可以使用CMultiDocTemplate。
總結(jié)
以上是生活随笔為你收集整理的深入浅出MFC-侯俊杰的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2602):什么是跨域请求和跨
- 下一篇: 前端学习(2771):图片上传