如果在看完上一篇文章后觉得有点晕,不要害怕。本节我们就不用这些宏,而是用其中的内容重新完成开头那个程序,进而探究MFC消息映射的本来面目。
MFC消息映射机制初探
还我本来面目
class CMyWnd : public CFrameWnd
{
public:
//原有代码
void OnLButtonDown(UINT nFlags, CPoint point)
{
MessageBox(TEXT("In CMyWnd::OnLButtonDown"), TEXT("In CMyWnd::OnLButtonDown"), MB_OK);
}
static const AFX_MSGMAP* __stdcall GetThisMessageMap();
virtual const AFX_MSGMAP* GetMessageMap() const;
};
const AFX_MSGMAP* CMyWnd::GetMessageMap() const
{
return GetThisMessageMap();
}
const AFX_MSGMAP* __stdcall CMyWnd::GetThisMessageMap()
{
typedef CMyWnd ThisClass;
typedef CFrameWnd TheBaseClass;
static const AFX_MSGMAP_ENTRY _messageEntries[] =
{
{ WM_LBUTTONDOWN, 0, 0, 0, AfxSig_vwp, (AFX_PMSG)&ThisClass::OnLButtonDown },
{ 0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }
};
static const AFX_MSGMAP messageMap = { &TheBaseClass::GetThisMessageMap, &_messageEntries[0] };
return &messageMap;
}
编译后,程序功能与之前用宏定义的无异。我们再通过手工添加代码的方式让程序响应按键消息。
在CMyWnd类中增加OnChar函数:
void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
static