友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
深入浅出MFC第2版(PDF格式)-第40部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
…………………………………………………………Page 238……………………………………………………………
第篇 勿在浮砂築高台
};
class CFrameWnd : public CWnd
{
。。。
DECLARE_MESSAGE_MAP()
};
class CView : public CWnd
{
。。。
DECLARE_MESSAGE_MAP()
};
class CMyWinApp : public CWinApp
{
。。。
DECLARE_MESSAGE_MAP()
};
class CMyFrameWnd : public CFrameWnd
{
。。。
DECLARE_MESSAGE_MAP()
};
class CMyDoc : public CDocument
{
。。。
DECLARE_MESSAGE_MAP()
};
class CMyView : public CView
{
。。。
DECLARE_MESSAGE_MAP()
};
并且把各消息映射表的关联性架设起来,给予初值(每一个映射表都只有ON_MAND
一个项目):
// in implementation files
BEGIN_MESSAGE_MAP(CWnd; CCmdTarget)
ON_MAND(CWndid; 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CFrameWnd; CWnd)
ON_MAND(CFrameWndid; 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CDocument; CCmdTarget)
176
…………………………………………………………Page 239……………………………………………………………
第3章 MFC 六大關鍵技術之模擬
ON_MAND(CDocumentid; 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CView; CWnd)
ON_MAND(CViewid; 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CWinApp; CCmdTarget)
ON_MAND(CWinAppid; 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMyWinApp; CWinApp)
ON_MAND(CMyWinAppid; 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMyFrameWnd; CFrameWnd)
ON_MAND(CMyFrameWndid; 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMyDoc; CDocument)
ON_MAND(CMyDocid; 0)
END_MESSAGE_MAP()
BEGIN_MESSAGE_MAP(CMyView; CView)
ON_MAND(CMyViewid; 0)
END_MESSAGE_MAP()
同时也设定了消息的终极镖靶CCmdTarget 的映射表内容:
AFX_MSGMAP CCmdTarget::messageMap =
{
NULL;
&CCmdTarget::_messageEntries'0'
};
AFX_MSGMAP_ENTRY CCmdTarget::_messageEntries'' =
{
{ 0; 0; CCmdTargetid; 0; AfxSig_end; 0 }
};
于是,整个消息流动网就隐然成形了(图3…5 )。
177
…………………………………………………………Page 240……………………………………………………………
第篇 勿在浮砂築高台
CWinThread CWinApp CMyWinApp
; ; 111; ; ; ; ; 1111; ; ;
0;0;0;0;0;0 0;0;0;0;0;0
CView CMyView
m
e
CCmdTarget CWnd CFrameWnd CMyFrameWnd
s
; ; 122; ; ; ; ; 1221; ; ;
0;0;0;0;0;0 0;0;0;0;0;0 s
a
; ; 12; ; ; ; ; 121; ; ; ; ; 1211; ; ;
; ; 1; ; ; g
0;0;0;0;0;0 0;0;0;0;0;0 0;0;0;0;0;0
0;0;0;0;0;0 e
CDocument CMyDocument
; ; 13; ; ; ; ; 131; ; ;
0;0;0;0;0;0 0;0;0;0;0;0
图3…5 Frame7 程序所架构起来的消息流动网 (也就是Message Map)。
为了验证整个消息映射表,我必须在映射表中做点记号,等全部构造完成之后,再一一
追踪把记号显示出来。我将为每一个类别的消息映射表加上这个项目:
ON_MAND(Classid; 0)
这样就可以把Classid 嵌到映射表中当作记号。正式用途(于MFC 中)当然不是这样,
这只不过是权宜之计。
在main 函数中,我先产生四个对象(分别是CMyWinApp、CMyFrameWnd、CMyDoc、
CMyView 对象):
CMyWinApp theApp; // theApp 是CMyWinApp 对象
void main()
{
CWinApp* pApp = AfxGetApp();
pApp…》InitApplication();
pApp…》InitInstance(); // 产生CMyFrameWnd 对象
pApp…》Run();
178
…………………………………………………………Page 241……………………………………………………………
第3章 MFC 六大關鍵技術之模擬
CMyDoc* pMyDoc = new CMyDoc; // 产生CMyDoc 对象
CMyView* pMyView = new CMyView; // 产生CMyView 对象
CFrameWnd* pMyFrame = (CFrameWnd*)pApp…》m_pMainWnd;
。。。
}
然后分别取其消息映射表,一路追踪上去,把每一个消息映射表中的类别记号打印出来:
void main()
{
。。。
AFX_MSGMAP* pMessageMap = pMyView…》GetMessageMap();
cout
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!