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

隨筆-80  評論-22  文章-0  trackbacks-0

為什么要有消息映射,它的使用是怎樣的?

MFC程序是不包括主要函數和時間循環。所有的事件處理都是作為CWinApp的一部分在后臺處理的。而消息映射就是識別感興趣的事件然后調用函數來響應這些事件。

一,首先是正常的程序

// button1.cpp
  #include
  #define IDB_BUTTON 100
  // Declare the application class
  class CButtonApp : public CWinApp
  {
  public:
  virtual BOOL InitInstance();
  };
  // Create an instance of the application class
  CButtonApp ButtonApp;
  // Declare the main window class
  class CButtonWindow : public CFrameWnd
  {
  CButton *button;
  public:
  CButtonWindow();
  };
  // The InitInstance function is called once
  // when the application first executes
  BOOL CButtonApp::InitInstance()
  {
  m_pMainWnd = new CButtonWindow();
  m_pMainWnd->ShowWindow(m_nCmdShow);
  m_pMainWnd->UpdateWindow();
  return TRUE;
  }
  // The constructor for the window class
  CButtonWindow::CButtonWindow()
  {
  CRect r;
  // Create the window itself
  Create(NULL,
  "CButton Tests",
  WS_OVERLAPPEDWINDOW,
  CRect(0,0,200,200));
  // Get the size of the client rectangle
  GetClientRect(&r);
  r.InflateRect(-20,-20);
  // Create a button
  button = new CButton();
  button->Create("Push me",
  WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
  r,
  this,
  IDB_BUTTON);
  }

當你運行代碼時,會注意到按鈕響應了用戶事件。既它加亮了。除此之外它沒有做任何事情,因為我們還沒有教它怎樣去做。我們需要編寫消息映射來使按鈕做一些感興趣的事情。

二,建立消息映射

// button2.cpp
  #include
  #define IDB_BUTTON 100
  // Declare the application class
  class CButtonApp : public CWinApp
  {
  public:
  virtual BOOL InitInstance();
  };
  // Create an instance of the application class
  CButtonApp ButtonApp;
  // Declare the main window class
  class CButtonWindow : public CFrameWnd
  {
  CButton *button;
  public:
  CButtonWindow();
  afx_msg void HandleButton(); //
  DECLARE_MESSAGE_MAP()

  };
  // The message handler function
  void CButtonWindow::HandleButton()
  {
  MessageBeep(-1);
  }

  // The message map
  BEGIN_MESSAGE_MAP(CButtonWindow, CFrameWnd)
  ON_BN_CLICKED(IDB_BUTTON, HandleButton)
  END_MESSAGE_MAP()

/*用宏來建立消息映射。在代碼中,你可以看見BEGIN_MESSAGE_MAP宏接收兩各參數。第一個指定了使用消息映射的類的名稱。第二個是基類。然后是ON_BN_CLICKED宏,接受兩個參數控制的ID和該ID發送命令消息時所調用的函數。最后,消息映射用END_MESSAGE_MAP來結束。

當用戶單擊按鈕時,它向其包含該按鈕的父窗口發送了一個包含其ID的命令消息。那是按鈕的缺省行為,這就是該代碼工作的原因。按鈕向其父窗口發送消息,是因為它是子窗口。父窗口截取該消息并用消息映射來確定所要調用的函數。MFC來安排,只要指定的消息一出現,相應的函數就會被調用。
  ON_BN_CLICKED消息是CButton發送的唯一感興趣的消息。它等同于CWnd中的ON_COMMAND消息,只是一個更簡單方便的同義詞而已。*/

  // The InitInstance function is called once
  // when the application first executes
  BOOL CButtonApp::InitInstance()
  {
  m_pMainWnd = new CButtonWindow();
  m_pMainWnd->ShowWindow(m_nCmdShow);
  m_pMainWnd->UpdateWindow();
  return TRUE;
  }
  // The constructor for the window class
  CButtonWindow::CButtonWindow()
  {
  CRect r;
  // Create the window itself
  Create(NULL,
  "CButton Tests",
  WS_OVERLAPPEDWINDOW,
  CRect(0,0,200,200));
  // Get the size of the client rectangle
  GetClientRect(&r);
  r.InflateRect(-20,-20);
  // Create a button
  button = new CButton();
  button->Create("Push me",
  WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
  r,
  this,
  IDB_BUTTON);
  }

上邊修改了兩個地方,1增加了一個新的成員函數和一個新的表示消息映射的宏。HandleButton函數是正常的c++函數,它通過afx_msg標簽確定為消息處理函數。該函數有一些特殊約束,比如它必須是void型并且不能接收任何參數。 DECLARE_MESSAGE_MAP宏建立了消息映射。函數和宏都必須是public型的。

 

對消息映射的理解:

消息映射智能用于MFC。使用消息映射的原因是解決虛擬函數的基本問題。 MFC文件中CWnd類,它包含200多個成員函數,所有成員函數當不使用消息映射都是虛擬的。MFC中大約有近30個類是以CWnd為基類的。這包括所有的可見控制如按鈕、靜態標簽和列表。想象一下,mfc使用虛擬啊和你熟,并且你建立以應用程序包含20個控制.CWnd中200個虛擬函數中每個都需要自己的虛擬函數表,并且一個控制的每個例程都應有一組200個虛擬函數與之關聯。則程序可能就有近4000個虛擬函數表在內存中,這對內存有限的及其來書是個大問題,因為其中的大部分是不用的。

消息映射復制了虛擬函數表的操作,但是它是基于需要的基礎之上的。消息映射就是對系統說“當你看見一個特殊的消息時,請調用制定的函數”,只有這些函數實際上被重載到消息映射中,就節省二樓內存和cpu的負擔。

posted on 2009-07-18 19:23 Bluesea 閱讀(553) 評論(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国产精品国产精品久久| 欧美在线精品免播放器视频| 国内一区二区三区在线视频| 久久av红桃一区二区小说| 久久色在线观看| 欧美在线黄色| 亚洲欧美激情四射在线日| 国产视频精品va久久久久久| 亚洲国产精品欧美一二99| 久久精品日韩欧美| 亚洲无亚洲人成网站77777| 欧美午夜剧场| 国产精品亚洲综合久久| 欧美日韩亚洲一区二区三区| 欧美国产日韩二区| 国产精品乱码妇女bbbb| 欧美激情中文字幕在线| 欧美日韩美女在线| 在线欧美三区| 亚洲美女在线视频| 日韩视频精品在线观看| 韩日午夜在线资源一区二区| 一区二区av| 日韩一级黄色大片| 久久精品1区| 六十路精品视频| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲第一在线视频| 欧美日韩一区二区国产| 亚洲电影免费观看高清完整版在线| 国产精品一区二区久激情瑜伽| 国产精品99久久久久久人| 一本色道久久88精品综合| 欧美成人一区二免费视频软件| 久热精品视频在线观看| 国产午夜精品全部视频在线播放| 国产精品99久久不卡二区| 亚洲午夜三级在线| 国产精品白丝jk黑袜喷水| 亚洲影院一区| 久久精品在这里| 国产欧美一区二区三区沐欲| 91久久中文| 欧美四级伦理在线| 欧美亚洲专区| 亚洲国产日韩在线一区模特| 日韩香蕉视频| 国产精品最新自拍| 久久国产精品亚洲va麻豆| 欧美成人精品一区二区| 欧美h视频在线| 亚洲一区二区在线视频| 久久激情视频久久| 日韩网站在线观看| 国产日韩欧美二区| 亚洲国产一区在线| 永久555www成人免费| 欧美美女bb生活片| 久久久亚洲综合| 亚洲一区二区动漫| 99精品99久久久久久宅男| 老司机一区二区| 久久精品一区二区三区四区 | 欧美激情第9页| 999在线观看精品免费不卡网站| 欧美一区二区三区视频在线| 中文久久乱码一区二区| 亚洲国产第一页| 国产三级欧美三级日产三级99| 欧美国产日韩一区二区在线观看| 久久久久久久欧美精品| 欧美理论在线| 亚洲女性裸体视频| 蜜臀va亚洲va欧美va天堂| 久久国产精品一区二区三区四区| 亚洲激情社区| 亚洲精品一区二区三区蜜桃久| 在线免费观看日本一区| 一区二区三区在线视频播放| 国产日本亚洲高清| 国产自产在线视频一区| 激情成人亚洲| 91久久黄色| 一本色道久久99精品综合| 亚洲专区免费| 久久久国产精品一区二区三区| 久久久久久伊人| 亚洲国产日韩在线| 久久久精品国产99久久精品芒果| 欧美激情 亚洲a∨综合| 国产一区二区三区在线观看免费视频| 亚洲国产精品福利| 免费视频最近日韩| 先锋影音国产一区| 一区二区国产精品| 欧美国产亚洲精品久久久8v| 在线免费观看视频一区| 久久精品国产2020观看福利| 国产综合久久久久久| 亚洲欧美成人精品| 99国产精品久久久| 国产精品成人播放| 亚洲无人区一区| 日韩一本二本av| 国产精品视频成人| 久久久久久久久久码影片| 久久精品噜噜噜成人av农村| 国产精品自在欧美一区| 久久精品成人一区二区三区| 欧美亚洲视频一区二区| 在线看片第一页欧美| 欧美激情第3页| 欧美日韩亚洲一区二区三区在线| 欧美亚洲免费电影| 久久精品欧美| 中文国产亚洲喷潮| 欧美主播一区二区三区美女 久久精品人| 国产欧美激情| 亚洲激情成人| 国产精品视频xxx| 亚洲国产成人久久综合一区| 国产精品欧美风情| 欧美日一区二区三区在线观看国产免| 亚洲一区二区三区影院| 午夜国产精品视频| 日韩视频在线永久播放| 久久精品夜色噜噜亚洲aⅴ| 99riav久久精品riav| 久久久久这里只有精品| 亚洲欧美日韩视频一区| 欧美电影免费观看大全| 久久理论片午夜琪琪电影网| 欧美视频日韩| 亚洲精品在线二区| 亚洲精品日韩在线| 久久夜色精品一区| 女仆av观看一区| 在线成人国产| 久久婷婷国产综合精品青草| 欧美自拍丝袜亚洲| aa日韩免费精品视频一| 最新成人av在线| 久久亚洲国产成人| 美腿丝袜亚洲色图| 黑人巨大精品欧美一区二区 | 亚洲日韩欧美视频| 国产一区二区成人| 亚洲一区二区三区777| 亚洲尤物视频网| 欧美色精品天天在线观看视频| 亚洲国产专区校园欧美| 亚洲高清不卡av| 欧美韩国在线| 亚洲国产精品一区二区三区| 亚洲国产天堂久久综合网| 亚洲欧美日韩久久精品 | 亚洲精品欧美极品| 欧美xart系列在线观看| 日韩视频亚洲视频| 久久久久天天天天| 亚洲人成高清| 国产精品视频网站| 久久久www成人免费无遮挡大片| 欧美gay视频| 亚洲欧美激情四射在线日| 极品少妇一区二区三区精品视频| 久久免费少妇高潮久久精品99| 亚洲精品永久免费精品| 久久亚洲一区二区三区四区| aa级大片欧美三级| 韩国一区二区三区在线观看| 欧美视频一区| 欧美精品福利| 免费视频一区二区三区在线观看| 99精品国产一区二区青青牛奶| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲三级免费| 亚洲激情欧美| **网站欧美大片在线观看| 国产日韩欧美亚洲| 国产精品专区一| 国产噜噜噜噜噜久久久久久久久| 久久亚洲一区二区| 久久久之久亚州精品露出| 久久精品导航| 久久久久九九九九| 久久综合国产精品| 久久精品国产亚洲5555| 欧美在线地址| 亚洲激情专区|