- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
--(完美WORD文档DOC格式,可在线免费浏览全文和下载)值得下载!
浅析MFC程序基本运行机制
或许我不该写这篇文章;或许你会不屑的看了看标题,然后华丽的WS之;又或许你会在看完之后,在这篇文章的末尾的写上“打倒KC,打倒MFC,打倒M$”,然后签上自己伟大的名字。
但是这都丝毫不会影响包括我在内的所有想了解MFC的Coder对于MFC研究。或许,有好几个问题曾连续地在你的脑海里浮现:
MFC很容易学么?是的,很容易。但是前提是你首先得理解他的源代码,并且看懂背后的故事。
MFC很复杂么?是的,以MFC4.X来说,仅是一个单独的源文件都有超过120000行的代码,这还不算头文件和.H扩展文件。
MFC很强大么?是的,它不仅能让你更加了解Windows系统的运行机理,还能让你从传统SDK的束缚中解脱出来。
MFC很恶心么?是的,它会时常让你感到,不是你在控制MFC,而是MFC在控制你
MFC很完美么?没有完美的思想,也没有完美的程序。从产生人类文明至今,尚未出现真正称得上“完美”的东西。因为我们在进步,在革命。
……
常言道:知己知彼,百战不殆。如果你真的决定使用MFC,那么你就应该好好的研究它的内部运行机制。这不是关键性的,但是是必要性的。
而这篇文章,就向大家展示了MFC程序的基本运行机制。
温故知新
在研究MFC的基本运行机制之前,先让我们来回忆一下使用C++/SDK写Windows GUI程序的顺序:
调用WinMain入口函数→注册窗口类→窗口实例化→建立消息循环→处理消息
可以说,几乎每个Windows GUI程序的建立和运行,都要经过上面的几个步骤,MFC程序也不例外。但是由于MFC是以C++为基础,所以它势必会使用OOP思想进行架构。而这一切,都会导致我们研究MFC的方式会和C++/SDK有那么一点区别。
我们在下面会以MFC的Class为中心进行研究,而非Windows窗体的线性行为。这意味着我们得忍受在几个类中跳来跳去。是的,你可能会感到身体不适,我同样有这种感觉,我从小就恨透了goto……
那么,就让我们先来看看使用MFC改如何创建一个简单的窗体,然后在逐步抽丝剥茧,剖析MFC程序的基本运行机理。
/****************************************************?Project:MFCAppUser**?File:MFCAppUser.cpp**?Edition:NULL**?Coder:KingsamChen?[MDSA?Group]**?Last?Modify:2008-8-9**************************************************/#include?afxwin.h??//?必备的头文件,这个头文件间接包含了windows.hclass?CMFCApp?:?public?CWinApp??//?继承CWinApp{??public:????virtual?BOOL?InitInstance();??//?虚函数??????????????????????????????????//?这个函数必须重写};class?CMFCAppWindow?:?public?CFrameWnd{??public:????CMFCAppWindow()??//?在构造函数里创建窗体~????{??????Create(NULL,KCs?Windows);??//?除前两个参数外,其他参数均有初始值????}????//?下面是消息映射的东东????afx_msg?void?OnLButtonDblClk(UINT?nFlags,?CPoint?point);??//?左键双击的消息声明????afx_msg?void?OnPaint();??//?WM_PAINT消息声明????DECLARE_MESSAGE_MAP()??//?消息映射宏};//?MS叫做消息映射表BEGIN_MESSAGE_MAP(CMFCAppWindow,?CFrameWnd)??ON_WM_LBUTTONDBLCLK()??ON_WM_PAINT()END_MESSAGE_MAP()//?对应的消息处理,类似SDK窗体里面的回调函数处理过程void?CMFCAppWindow::OnLButtonDblClk(UINT?nFlags,?CPoint?point){??MessageBox(KC?is?a?Fucker,?NULL,?MB_OK);}void?CMFCAppWindow::OnPaint(){??CPaintDC?Paint(this);
原创力文档


文档评论(0)