日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

afx_msg函数意思

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 afx_msg函数意思 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

應用程序框架產生的消息映射函數
例如:afx_msg void OnBnClickedButton1(); 其中 afx_msg為消息標志,它向系統聲明:有消息映射到函數實現體;
而在map宏定義中,就有具體消息和此函數的映射定義(可以是自定義,也可以是系統自動完成的)
afx是 application framework
如定義一個Edit的Change處理函數:
一、在類的頭文件(*.h)中增加 :
? //{{AFX_MSG(CDialogDemo)??
? afx_msg? void OnChangeEdit1();
? //{{AFX_MSG??
二、在類的實現文件(*.cpp)中增加:
?
1.消息定義( ON_EN_CHANGE):
BEGIN_MESSAGE_MAP(CDialogDemo, CDialog)
//{{AFX_MSG_MAP()??
ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
?//}}AFX_MSG_MAP??
END_MESSAGE_MAP()??
2.執行函數:
void CDialogDemo::OnChangeEdit1()
{
?// TODO: Add your control notification handler code here
……
}??

在afxwin.h中afx_msg的解釋:?
? #ifndef?? afx_msg?
? #define?? afx_msg?????????????????? //?? intentional?? placeholder?
? #endif?
??? 沒什么意思.只是定義了這個符號而已.?? 這個對編譯器來說,相當于什么都沒有,對于人來說,我們可以看到這樣的符號.??
對于類向導來說.這個符號才是有意義的.它是一個消息處理函數的前綴.?? 類向導生成的消息函數,分發函數,事件響應函數都以這個為前綴.?
?如果去掉了,向導將不能識別

?

?

DECLARE_MESSAGE_MAP的理解

在一些資料上,有這么一段文字:
DECLARE_MESSAGE_MAP()
說明:
用戶程序中的每個CCmdTarget派生類必須提供消息映射以處理消息。在類定義的末尾使用DECLARE_MESSAGE_MAP宏。接著,在定義類成員函數的.CPP文件中,使用BEGIN_MESSAGE_MAP宏,每個用戶消息處理函數的宏項下面的列表以及END_MESSAGE_MAP宏。
注釋:
如果在DECLARE_MESSAGE_MAP之后定義任何一個成員,那么必須為他們指定一個新存取類型(公共的,私有的,保護的)。

我覺得他描述得欠妥,我的理解是:

只要有:只要是CCmdTarget(用于所有能夠消息映射的基類)派生類,必有消息映射以處理消息,則在類的說明文件的尾部有DECLARE_MESSAGE_MAP宏,在類的定義文件中有BEGIN_MESSAGE_MAP宏和END_MESSAGE_MAP宏以處理用戶消息。

其中BEGIN_MESSAGE_MAP(參數1,參數2) ,參數1為該類的類名參數2為該類基類的類名

其中ON_MESSAGE(參數1,參數2),參數1為響應的消息參數2為該消息對應的處理的函數名

BEGIN_MESSAGE_MAP(CH264PlayerDlg, CDialog)
//{{AFX_MSG_MAP(CH264PlayerDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_SIZE()
ON_BN_CLICKED(IDC_PLAY, OnPlay)
ON_COMMAND(IDR_FILE_OPEN, OnFileOpen)
ON_BN_CLICKED(IDC_STOP, OnStop)
ON_COMMAND(IDR_VIEW_FULLSCRREN, OnViewFullscrren)
ON_COMMAND(IDR_VIEW_ORIGINALSIZE, OnViewOriginalsize)
ON_WM_LBUTTONDBLCLK()
ON_BN_CLICKED(IDC_CUTPIC, OnCutPicture)
ON_COMMAND(IDR_ABOUTBOX, OnAboutbox)
ON_WM_ERASEBKGND()
ON_WM_CTLCOLOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

?

MFC BEGIN_MESSAGE_MAP()

簡單用法:

  BEGIN_MESSAGE_MAP(CpassApp, CWinApp)

  ON_COMMAND(ID_HELP, CWinApp::OnHelp)

  END_MESSAGE_MAP()

  這些都是宏定義,不是函數。

  在BEGIN_MESSAGE_MAP()和END_MESSAGE_MAP()之間添加你的消息響應函數,為每個消息處理函數加入一個入口

  BEGIN_MESSAGE_MAP( theClass, baseClass )

參數:

  

theClass指定消息映射所屬的類的名字。
baseClass指定theClass的基類的名字。

說明:

  使用BEGIN_MESSAGE_MAP宏開始你的消息映射的定義。

  在你的類的成員函數的實現文件(.CPP)中,使用BEGIN_MESSAGE_MAP宏開始消息映射,然后為每個消息處理函數加入一個入口,最后用END_MESSAGE_MAP宏結束消息映射。

  每個消息映射入口的格式如下:

  ON_Notification(id, memberFxn)

  其中id指定了發送通知的控件的子窗口的ID,而memberFxn指定了處理該通知的父對象中的成員函數名。

  父對象的函數原型格式如下:

  afx_msg void memberFxn( );

  可能的消息映射入口如下:

  

映射入口何時向父對象發送消息
ON_BN_CLICKED用戶單擊按鈕時
ON_BN_DOUBLECLICKED用戶雙擊按鈕時

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的afx_msg函数意思的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。