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

隨筆-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 閱讀(551) 評論(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>
            亚洲精品无人区| 男人的天堂亚洲在线| 亚洲中字黄色| 亚洲欧美一区二区精品久久久| 久久综合网络一区二区| 亚洲国产日韩欧美一区二区三区| 久久综合九色综合网站| 欧美日韩福利在线观看| 亚洲综合社区| 狼狼综合久久久久综合网 | 欧美精品少妇一区二区三区| 亚洲电影免费在线| 亚洲欧洲一级| 欧美日韩激情网| 久久免费视频观看| 欧美刺激午夜性久久久久久久| 中文国产成人精品| 免费观看久久久4p| 欧美一区二区大片| 欧美极品在线观看| 欧美成人免费在线观看| 国产精品第十页| 亚洲伦理在线观看| 亚洲国产日韩欧美在线99 | 久久夜色精品国产欧美乱极品| 亚洲第一网站| 久久精品道一区二区三区| 亚洲欧美国产va在线影院| 欧美高清自拍一区| 国产欧美在线观看| 亚洲免费高清视频| aa成人免费视频| 麻豆精品传媒视频| 亚洲国产福利在线| 99综合在线| 欧美午夜不卡在线观看免费| 亚洲精选在线| 欧美在线国产精品| 国产色产综合色产在线视频| 欧美一区成人| 欧美顶级艳妇交换群宴| 99精品热视频只有精品10| 欧美日韩中字| 久久国产夜色精品鲁鲁99| 奶水喷射视频一区| 亚洲网址在线| 老司机精品视频一区二区三区| 国产欧美日韩一区二区三区在线观看| 亚洲制服丝袜在线| 久久一区二区三区国产精品| 91久久精品美女高潮| 欧美激情综合五月色丁香| 亚洲在线视频观看| 欧美黄色一区| 久久国产加勒比精品无码| 亚洲高清影视| 国产日韩欧美一区| 欧美激情一区二区三级高清视频 | 免费视频一区二区三区在线观看| 午夜一区二区三视频在线观看| 国产一区二区三区免费在线观看| 久久精品99国产精品| 亚洲高清不卡在线| 亚洲欧美日韩直播| 国产日产亚洲精品| 欧美岛国在线观看| 亚洲精品中文在线| 激情丁香综合| 免费中文字幕日韩欧美| 99精品福利视频| 亚洲电影免费在线| 欧美在线播放| 亚洲欧洲日本专区| 黄网站色欧美视频| 欧美日韩国产另类不卡| 久久久久久久999精品视频| 日韩视频免费在线| 亚洲福利免费| 亚洲欧洲一级| 夜夜夜久久久| 亚洲午夜一级| 亚洲视频在线观看免费| 亚洲天堂视频在线观看| 午夜精品久久久久久久久| 久久九九国产| 欧美日韩国产首页| 精品成人国产在线观看男人呻吟| 亚洲国产成人高清精品| 一区二区三区欧美成人| 久久国产精品电影| 欧美高清视频www夜色资源网| 亚洲精品久久| 欧美在线视频一区二区| 蜜臀久久久99精品久久久久久| 欧美日韩综合在线免费观看| 国色天香一区二区| 亚洲精品一区中文| 久久精品视频网| 亚洲精品久久久久久久久| 欧美一进一出视频| 欧美色另类天堂2015| 亚洲欧美在线一区| 欧美另类高清视频在线| 国产精品综合| 亚洲一区二区三区影院| 欧美电影免费| 久久精品视频va| 一区二区免费在线观看| 久热这里只精品99re8久| 国产精品久久久久久亚洲调教| 亚洲精品日韩在线观看| 久久久无码精品亚洲日韩按摩| 日韩一级二级三级| 欧美日韩国产一区精品一区| 亚洲国产欧美日韩| 亚洲国产二区| 欧美日韩精品免费观看视频完整| 在线精品国产欧美| 亚洲第一在线综合在线| 免费视频一区二区三区在线观看| 亚洲国产一区二区精品专区| 欧美成人黑人xx视频免费观看| 美女日韩欧美| 亚洲欧美日韩精品久久奇米色影视 | 欧美成人日韩| 99国产一区| 亚洲综合色自拍一区| 狠狠综合久久av一区二区小说| 女女同性女同一区二区三区91| 欧美成人r级一区二区三区| 一区二区三区精品国产| 欧美在线关看| 亚洲综合欧美| 蜜桃久久精品乱码一区二区| 日韩视频在线一区二区| 午夜精品免费在线| 亚洲每日更新| 欧美一级二区| 亚洲午夜电影| 裸体女人亚洲精品一区| 亚洲一区二区三区四区中文| 久久网站免费| 亚洲视频一二区| 久久精品一本久久99精品| 午夜在线观看欧美| 欧美日韩国产区| 亚洲人www| 亚洲免费观看高清完整版在线观看| 亚洲视频精选在线| 欧美xart系列在线观看| 久久九九电影| 国产视频精品va久久久久久| 一本色道久久88精品综合| 亚洲第一福利视频| 久久精品亚洲一区二区| 久久大综合网| 国产欧美日韩视频| 亚洲一区二区三区中文字幕| 亚洲人午夜精品| 欧美激情一区二区三区蜜桃视频| 欧美成人午夜剧场免费观看| 在线电影一区| 欧美理论大片| 亚洲男女毛片无遮挡| 久久久xxx| 亚洲国产一区二区三区高清| 亚洲综合视频一区| 国模精品一区二区三区| 欧美在线三区| 欧美顶级艳妇交换群宴| 亚洲日韩欧美视频| 欧美久久一区| 久久精品一区二区三区中文字幕| 久久深夜福利| 亚洲图色在线| 尤物99国产成人精品视频| 欧美韩国一区| 亚洲网在线观看| 久久精品成人欧美大片古装| 国产精品男女猛烈高潮激情| 亚洲欧美中文在线视频| 久久精品91久久香蕉加勒比| 欧美日韩亚洲综合| 午夜国产精品视频| 欧美大香线蕉线伊人久久国产精品| 亚洲国产天堂久久综合| 欧美三级日韩三级国产三级| 中国日韩欧美久久久久久久久| 久久爱www久久做| 最近中文字幕mv在线一区二区三区四区| 欧美日韩一区高清| 久久久久九九视频| 亚洲女与黑人做爰| 亚洲人成免费| 久久综合五月| 欧美在线视频在线播放完整版免费观看| 亚洲国产影院| 黑人巨大精品欧美一区二区| 欧美涩涩网站| 欧美另类在线观看|