MFC如何添加系统消息处理函数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC如何添加系统消息处理函数?相关的知识,希望对你有一定的参考价值。
参考技术A建立MFC单文档,定义View类的成员变量CButton m_button。
在***View类中添加OnCreate 或OnInitialUpdate 函数,并在函数中加入CRectrect_button(40,10,200,60); //控制按钮大小、位置 m_button.Create("hello",WS_CHILD|WS_VISIBLE|WS_BORDER,rect_button,this,IDC_DYNAMICBUTTON);
m_button.ShowWindow(SW_SHOWNORMAL)
这样按钮应该都可以显示出来了。
然后添加消息响应函数。头文件中加入afx_msg void OnBtnDown()
BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之间加入ON_BN_CLICKED(IDC_DYNAMICBUTTON,OnBtnDown) 关联按钮变量;
最后加入定义void ***View::OnBtnDown() MessageBox("hello","helloworld",MB_OK);
在头文件中声明一个消息相应函数virtual LRESULT OnMyMessage(WPARAM wParaM,LPARAM lParam);
在.cpp文件中将消息 和具体的消息相应函数联系起来ON_BN_CLICKED(WM_MY_MESSAGE,OnMyMessage
实现具体的消息相应函数:LRESULT CMyView::OnMyMessage(WPARAM wParam,LPARAM lParam)。
MFC宏消息处理机制的原理
1.1、在MFC中处理消息的函数是固定的,如afx_msg int OnCreate(LPCREATESTRUCT);这是一个固定的,对应于ON_WM_CREAT()宏。如果改变了函数名,对应的宏就会不认识。
1.2、MyCreate函数,用来响应系统的WM_CREATE消息,这些函数是有固定格式要求的。并且函数名必须和MSDN给定的函数名保持完全一致。
1.3、
struct AFX_MSGMAP { const AFX_MSGMAP* (PASCAL* pfnGetBaseMap)(); const AFX_MSGMAP_ENTRY* lpEntries; };
1.4、
struct AFX_MSGMAP_ENTRY { UINT nMessage; // windows message UINT nCode; // control code or WM_NOTIFY code UINT nID; // control ID (or 0 for windows messages) UINT nLastID; // used for entries specifying a range of control id‘s UINT_PTR nSig; // signature type (action) or pointer to message # AFX_PMSG pfn; // routine to call (or special value) };
1.5、OnWndMsg();这个函数负责处理消息映射机制宏中的消息。
1.6、
struct AFX_MSG_CACHE { UINT nMsg; AFX_MSGMAP_ENTRY *lpEntry; AFX_MSGMAP *pMessageMap; }
1.7、AfxFindMessageEntry(pMessageMap->lpEntries, message, 0, 0) != null
如果,pMessageMap->lpEntries指向的数组中,有message消息,那么该函数返回数组中这个元素的地址,否则返回null
以上是关于MFC如何添加系统消息处理函数?的主要内容,如果未能解决你的问题,请参考以下文章