winSDK编程与MFC编程的区别
2013-01-23 13:18
204 查看
可以发现MFC的很多成员函数除了和API函数名字几乎相同之外,有个不同之处就是MFC的函数不需要句柄这个参数,它用对象指针代替了句柄。一开始我还以为这样的话MFC就只能操作它自己本身的东西,不能操作它外部其它程序的东西,因为要操作其它程序的窗口的话需要用到其它程序的窗口的句柄,而MFC的函数不需要句柄作参数。比如winSDK编程,可以用FindWindow函数获取IE浏览器的句柄,然后用SendMessage()函数给它发送一个WM_CLOSE消息,IE浏览器就关掉了。后来我才发现原来纯粹用MFC也可以做到,CWnd类里面也有FindWindow函数,不过它获取的不是句柄,而是一个CWnd指针,这样就可以获取到指向IE浏览器窗口的指针,然后用这个指针,调用CWnd::SendMessage()函数,也可以给它发送一个WM_CLOSE消息,或者是用这个指针,调用CWnd::ShowWindow(SW_HIDE)把它隐藏起来。原来是这样!我以前还老是在MFC里面用::API函数,其实MFC里很多都可以实现,能用MFC实现就尽量不::API了。
总结下来,其实winSDK编程与MFC编程的区别主要就在于:
1.编程思想不同,winSDK编程是面向过程,MFC编程是面向对象
2.句柄与指针,如上所述,winSDK编程中大部分API函数都需要句柄,而MFC编程中用对象指针代替了句柄
3.默认值,winSDK编程,每个结构体、每个函数参数都要自己一一填充,而MFC很多函数都提供了默认参数、很多对象构造出来后就有默认成员变量值
4.画界面的不同,winSDK编程也可以加载界面资源,但比较麻烦,需要自己写很多代码,并且很多时候都需要用纯代码写界面。MFC由于有VisualStudio编译器的强大支持,有了“类向导”等神器,在画了一个窗体、控件后,编译器做了很多工作,帮我们写了不少代码,所以很方便。如果没有编译器帮我们做这些工作的话,我们手动一点点来的话,其实也是比较麻烦的。
5.AppWizard。在VisualStudio里,用AppWizard建立一个win32项目和建立MFC项目显然是不同的。对于win32项目,AppWizard做的很少很少,最多帮你弄好了消息循环和窗口过程等。而对于MFC项目的AppWizard,实在是强大,以至于我们抱怨“别给我生成那么多!简单点就可以,我只写个小程序!”。当然,如果我们只是写个超级简单的不需要界面甚至不需要消息循环的小程序,就不要用AppWizard了。用winSDK也可,MFC也可,自己建个空项目,手动添加.cpp。winSDK的话写个WinMain函数,MFC的话实例化CWinApp对象。不过这种情况的话,用winSDK更方便。
6.等等等。。。
总结下来,其实winSDK编程与MFC编程的区别主要就在于:
1.编程思想不同,winSDK编程是面向过程,MFC编程是面向对象
2.句柄与指针,如上所述,winSDK编程中大部分API函数都需要句柄,而MFC编程中用对象指针代替了句柄
3.默认值,winSDK编程,每个结构体、每个函数参数都要自己一一填充,而MFC很多函数都提供了默认参数、很多对象构造出来后就有默认成员变量值
4.画界面的不同,winSDK编程也可以加载界面资源,但比较麻烦,需要自己写很多代码,并且很多时候都需要用纯代码写界面。MFC由于有VisualStudio编译器的强大支持,有了“类向导”等神器,在画了一个窗体、控件后,编译器做了很多工作,帮我们写了不少代码,所以很方便。如果没有编译器帮我们做这些工作的话,我们手动一点点来的话,其实也是比较麻烦的。
5.AppWizard。在VisualStudio里,用AppWizard建立一个win32项目和建立MFC项目显然是不同的。对于win32项目,AppWizard做的很少很少,最多帮你弄好了消息循环和窗口过程等。而对于MFC项目的AppWizard,实在是强大,以至于我们抱怨“别给我生成那么多!简单点就可以,我只写个小程序!”。当然,如果我们只是写个超级简单的不需要界面甚至不需要消息循环的小程序,就不要用AppWizard了。用winSDK也可,MFC也可,自己建个空项目,手动添加.cpp。winSDK的话写个WinMain函数,MFC的话实例化CWinApp对象。不过这种情况的话,用winSDK更方便。
6.等等等。。。
相关文章推荐
- MFC与Win32编程的区别与联系
- C++ win32编程、mfc编程、ATL编程的区别
- Visual Studio 2005.NET中的CLR编程和MFC编程有什么区别?
- 初识概念:Windows编程:VC++下的MFC与SDK区别(差别)详细阐述
- VS2010/MFC 入门编程四(OnOK()、OnCancel()、OnClose()、OnDestroy()之间的区别)
- MFC编程中UpdateData(true)和UpdateData(false)的区别
- MFC编程AfxBeginThread与CreateThread使用区别
- CAsyncSocket与CSocket的区别 MFC网络编程
- 用MFC实现串口编程
- Windows API和MFC的区别
- 静态链接库、动态链接库、MFC的联系与区别
- 用MFC实现串口编程
- 非MFC的界面编程 - 复选框CHECKBOX
- MFC窗口大小变化:OnSIze、OnSizing和OnGetMinMaxInfo区别与关系
- MFC 串口编程详细教程 图文并茂
- VS2010/MFC编程入门之二十九(常用控件:列表视图控件List Control 下)
- mfc编程出现“无法解析的外部命令“解决方法
- 网络编程中设计并发服务器,使用多进程 与 多线程 ,请问有什么区别?
- img src属性 DOM编程下 img.src与element.getAttribute("src")的区别
- VS2013/MFC编程入门之三十五(状态栏的使用详解)