读书人

一个MFC添加成员函数的有关问题

发布时间: 2012-01-31 21:28:41 作者: rapoo

一个MFC添加成员函数的问题
在CTestView类里面通过类向导增加OnCreate()之类的消息处理函数,为什么不会像一般的成员函数那样系统会将函数的申明写到CTestView的.h文件里面????
我看基类CView里面有一段代码:
//{{AFX_MSG(CView)
afx_msg int OnCreate(LPCREATESTRUCT lpcs);
afx_msg void OnDestroy();
afx_msg void OnPaint();
afx_msg int OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message);
// commands
afx_msg void OnUpdateSplitCmd(CCmdUI* pCmdUI);
afx_msg BOOL OnSplitCmd(UINT nID);
afx_msg void OnUpdateNextPaneMenu(CCmdUI* pCmdUI);
afx_msg BOOL OnNextPaneCmd(UINT nID);

// not mapped commands - must be mapped in derived class
afx_msg void OnFilePrint();
afx_msg void OnFilePrintPreview();
//}}AFX_MSG
于一般的代码颜色都不一样,什么意思了??
望高手指教!!


[解决办法]
给CTestView添加WM_CREATE消息处理函数时,在CTestView的头文件里有函数原型声明啊
在这里
// Generated message map functions
protected:
//{{AFX_MSG(CTestView)
afx_msg void OnTest();
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
至于为什么你将向导增加的OnCreate(LPCREATESTRUCT lpCreateStruct)删掉后程序编译不通过
是因为类向导还添加了一个WM_CREATE消息的消息映射。
在CTestView.cpp的最上面有个消息映射区,其中有一个 ON_WM_CREATE()
当程序运行时发出WM_CREATE消息时因为你之前通过类向导添加过WM_CREATE消息处理函数
所以在这里会有一个WM_CREATE的消息映射 ON_WM_CREATE(),程序检测到这个消息映射以后
就会去找相应的消息处理函数,如果你把它删了,因为他只是一个普通的成员函数,在编译期间
就必须确定它的相对地址,以便压栈,程序当然不会通过编译。要想不出错,那么就连哪个消息
映射 ON_WM_CREATE( )也一起删掉。这样程序便会将WM_CREATE消息传给CView处理,就不管CTestView
的事了。
最后再说一下如果你想要从类中删掉一个函数,可以在类视图中找到相应的函数然后右键 delete
这样就可以完整的删掉一个函数

读书人网 >VC/MFC

热点推荐