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如何添加系统消息处理函数?的主要内容,如果未能解决你的问题,请参考以下文章

MFC SDI中 如何为动态创建的按钮添加消息处理函数

VS2010-MFC(对话框:为控件添加消息处理函数)

MFC中的消息处理函数

MFC中没有消息处理怎么办

MFC宏消息处理机制的原理

VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)