青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

深入淺出MFC文檔/視圖架構(gòu)之相互關(guān)系

2006-03-21 14:20 作者: 宋寶華 出處: 天極開(kāi)發(fā) 責(zé)任編輯:方舟
  2. 消息流動(dòng)機(jī)制

  在基于"文檔/視圖"架構(gòu)的MFC程序中,用戶消息(鼠標(biāo)、鍵盤輸入等)會(huì)先發(fā)往視圖,如果視圖未處理則會(huì)發(fā)往框架窗口。所以,一般來(lái)說(shuō),消息映射宜定義在視圖中。另外,如果一個(gè)應(yīng)用同時(shí)擁有多個(gè)視圖而當(dāng)前活動(dòng)視圖沒(méi)有對(duì)消息進(jìn)行處理則消息也會(huì)發(fā)往框架窗口。

  下面我們來(lái)看實(shí)例,我們利用Visual C++向?qū)?chuàng)建一個(gè)單文檔/視圖架構(gòu)的MFC程序,在其中增加一個(gè)菜單項(xiàng)為"自定義"(ID為IDM_SELF,如圖6.4)。


圖6.4 含"自定義"菜單的單文檔/視圖架構(gòu)MFC程序

  我們分別在視圖類和框架窗口類中為"自定義"菜單添加消息映射,代碼如下:

//視圖中的消息映射和處理函數(shù)
BEGIN_MESSAGE_MAP(CExampleView, CView)
 //{{AFX_MSG_MAP(CExampleView)
  ON_COMMAND(IDM_SELF, OnSelf)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CExampleView::OnSelf()
{
 // TODO: Add your command handler code here
 AfxMessageBox("消息在視圖中處理");
}

//框架窗口中的消息映射和處理函數(shù)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
 //{{AFX_MSG_MAP(CMainFrame)
  ON_COMMAND(IDM_SELF, OnSelf)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CMainFrame::OnSelf()
{
 // TODO: Add your command handler code here
 AfxMessageBox("消息在框架窗口中處理");
}

  這時(shí)候,我們單擊"自定義"菜單,彈出對(duì)話框顯示"消息在視圖中處理";如果我們刪除框架窗口中的消息映射,再單擊"自定義"菜單,彈出對(duì)話框也顯示"消息在視圖中處理";但是,若我們將視圖中的消息映射刪除了,就會(huì)顯示"消息在框架窗口中處理"!這驗(yàn)證了我們關(guān)于消息處理順序論述的正確性。

  欲深入理解消息流動(dòng)過(guò)程,還需認(rèn)真分析CFrameWnd::OnCmdMsg、CView::OnCmdMsg函數(shù)的源代碼:

BOOL CFrameWnd::OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo)
{
 // pump through current view FIRST
 CView* pView = GetActiveView();
 if (pView != NULL && pView->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;

 // then pump through frame
 if (CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;

 // last but not least, pump through app
 CWinApp* pApp = AfxGetApp();
 if (pApp != NULL && pApp->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;

 return FALSE;
}

BOOL CView::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
 // first pump through pane
 if (CWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo))
  return TRUE;

 // then pump through document
 BOOL bHandled = FALSE;
 if (m_pDocument != NULL)
 {
  // special state for saving view before routing to document
  _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
  CView* pOldRoutingView = pThreadState->m_pRoutingView;
  pThreadState->m_pRoutingView = this;
  bHandled = m_pDocument->OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  pThreadState->m_pRoutingView = pOldRoutingView;
 }

 return bHandled;
}

  分析上述源代碼可知,WM_COMMAND消息的實(shí)際流動(dòng)順序比前文敘述的"先視圖,后框架窗口"要復(fù)雜得多,文檔和應(yīng)用程序都參與了消息的處理過(guò)程。如果我們?cè)贋槲臋n和應(yīng)用添加消息映射和處理函數(shù):

//文檔的消息映射和處理函數(shù)
BEGIN_MESSAGE_MAP(CExampleDoc, CDocument)
 //{{AFX_MSG_MAP(CExampleDoc)
  ON_COMMAND(IDM_SELF, OnSelf)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CExampleDoc::OnSelf()
{
 // TODO: Add your command handler code here
 AfxMessageBox("消息在文檔中處理");
}

//應(yīng)用的消息映射和處理函數(shù)
BEGIN_MESSAGE_MAP(CExampleApp, CWinApp)
//{{AFX_MSG_MAP(CExampleApp)
ON_COMMAND(IDM_SELF, OnSelf)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CExampleApp::OnSelf()
{
 // TODO: Add your command handler code here
 AfxMessageBox("消息在應(yīng)用中處理");
}

  屏蔽掉視圖和框架窗口的消息映射,再單擊"自定義"菜單,彈出對(duì)話框顯示"消息在文檔中處理";再屏蔽掉文檔中的消息映射,彈出對(duì)話框顯示"消息在應(yīng)用中處理"!由此可見(jiàn),完整的WM_COMMAND消息的處理順序是"視圖――文檔――框架窗口――應(yīng)用"!

  實(shí)際上,關(guān)于MFC的消息流動(dòng)是一個(gè)很復(fù)雜的議題,陷于篇幅的原因,我們不可能對(duì)其進(jìn)行更詳盡的介紹,讀者可自行尋找相關(guān)資料。
共2頁(yè)。 9712
Posted on 2007-01-21 15:04 艾凡赫 閱讀(654) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MFC
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久精品一区中文字幕| 99国产精品久久久久久久久久| 国产精品一区二区久久久久| 久久影院午夜论| 欧美一区二区三区视频免费| 欧美视频一区二区三区| 性欧美大战久久久久久久久| 亚洲一区二区高清| 欧美黑人在线观看| 亚洲电影下载| 亚洲精品一区二区三区四区高清| 一区二区三区四区五区在线 | 永久免费毛片在线播放不卡| 欧美成人免费在线观看| 免费观看久久久4p| 欧美激情精品久久久久| 欧美日韩精品久久久| 国产精品青草久久| 久久亚洲综合| 欧美一区视频在线| 亚洲日本理论电影| 免费亚洲网站| 亚洲国产精品黑人久久久| 亚洲精品乱码久久久久久蜜桃麻豆 | 欧美视频亚洲视频| 国产亚洲高清视频| 永久免费精品影视网站| 亚洲毛片在线看| 欧美中文字幕不卡| 亚洲国产精品高清久久久| 日韩午夜精品视频| 欧美91精品| 亚洲性线免费观看视频成熟| 免费高清在线视频一区·| 国产裸体写真av一区二区| 亚洲伦理网站| 免费一级欧美片在线观看| 亚洲免费中文字幕| 欧美日韩三级电影在线| 国产欧美日韩一区二区三区在线| 亚洲天堂成人在线观看| 国产精品久久久免费| 在线欧美日韩国产| 欧美一区深夜视频| av成人手机在线| 久久久精品国产一区二区三区| 国产精品久久福利| 99热在这里有精品免费| 欧美成人精品不卡视频在线观看| 亚洲欧美在线视频观看| 欧美日韩一区二区三区四区在线观看 | 激情国产一区| 最新国产乱人伦偷精品免费网站 | 亚洲午夜在线观看| 亚洲国产毛片完整版| 欧美一区二区三区在线视频| 一区二区三区四区国产精品| 欧美激情视频一区二区三区免费| 在线观看视频一区二区欧美日韩| 久久久噜噜噜久久人人看| 久久久久久久国产| 欧美一区91| 国产亚洲a∨片在线观看| 欧美在线三级| 欧美亚洲日本网站| 好吊日精品视频| 另类激情亚洲| 免费不卡中文字幕视频| 日韩视频欧美视频| 99re8这里有精品热视频免费 | 亚洲激情电影中文字幕| 亚洲第一成人在线| 欧美极品欧美精品欧美视频| 一区二区高清视频在线观看| 亚洲精品乱码久久久久久黑人| 欧美日本一道本| 午夜精品久久久久久久99樱桃| 午夜电影亚洲| 在线不卡中文字幕播放| 亚洲第一精品在线| 欧美午夜女人视频在线| 欧美一区91| 免费观看亚洲视频大全| 日韩视频永久免费| 午夜久久久久久| 亚洲精品久久久久中文字幕欢迎你 | 中文亚洲欧美| 欧美伊久线香蕉线新在线| 亚洲欧洲日产国产综合网| 一个色综合av| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲日本成人网| 国产精品初高中精品久久| 小处雏高清一区二区三区| 久久久欧美一区二区| 中文精品99久久国产香蕉| 欧美一级黄色网| 久久蜜臀精品av| 亚洲啪啪91| 国产一区二区三区在线观看免费视频 | 欧美国产日产韩国视频| 欧美日在线观看| 久久综合色播五月| 欧美色视频一区| 免费在线成人av| 国产精品亚洲欧美| 最新国产成人在线观看| 国内精品久久久久久久影视麻豆 | 一区二区三区精品在线| 在线观看免费视频综合| 亚洲在线中文字幕| 日韩系列在线| 麻豆久久精品| 久久欧美中文字幕| 国产精品热久久久久夜色精品三区 | 国产精品毛片一区二区三区 | 性久久久久久久久| 欧美精品久久久久久久免费观看| 久久精品国产一区二区三区免费看 | 久久国产精品99国产精| 欧美日韩国产综合视频在线观看 | 欧美日韩福利视频| 欧美国产精品久久| 欧美一区二区在线观看| 亚洲视频999| 欧美精品自拍| 亚洲国产日韩一区| 在线观看一区二区视频| 久久av二区| 久久久国产精品一区二区中文| 国产精品成人免费视频| av成人激情| 亚洲一级二级| 国产精品二区在线| 亚洲午夜精品17c| 亚洲欧美激情视频| 国产精品福利网| 亚洲一区二区三区中文字幕| 亚洲一级在线观看| 欧美三级在线视频| 亚洲午夜电影网| 亚洲性感激情| 国产精品美女999| 亚洲专区一区二区三区| 亚洲综合大片69999| 国产精品久99| 亚洲欧美精品伊人久久| 久久久久久婷| 亚洲狠狠婷婷| 欧美日韩视频专区在线播放| 一区二区三区不卡视频在线观看 | 欧美激情视频一区二区三区在线播放| 精品成人一区二区| 久久午夜av| 亚洲区在线播放| 亚洲女同精品视频| 国产在线拍揄自揄视频不卡99| 午夜精品久久| 欧美大尺度在线观看| 中国av一区| 欧美国产日本在线| 一本色道久久88综合日韩精品| 欧美日韩综合网| 欧美在线观看一区二区| 欧美激情国产精品| 亚洲欧美一区二区激情| 影音先锋中文字幕一区二区| 欧美日韩福利在线观看| 久久av免费一区| 亚洲片区在线| 久久久最新网址| 亚洲视频观看| 在线日韩中文字幕| 国产精品黄视频| 另类尿喷潮videofree| 一区二区三区av| 农村妇女精品| 午夜精品视频网站| 最新日韩精品| 国产日韩欧美精品一区| 欧美精品一区二区三区四区| 欧美一级视频一区二区| 亚洲国产综合视频在线观看| 香蕉乱码成人久久天堂爱免费| 91久久亚洲| 国产在线视频欧美| 国产精品久久久久国产精品日日| 麻豆av福利av久久av| 亚洲午夜在线| 亚洲欧洲精品天堂一级| 美女脱光内衣内裤视频久久网站| 亚洲视频第一页| 亚洲精品国产精品乱码不99按摩| 国产美女高潮久久白浆| 欧美涩涩视频| 欧美日韩一区在线播放| 欧美国产91| 欧美成人dvd在线视频| 久久精品一二三| 午夜精品久久久久久久99热浪潮|