您的位置:首页 > 编程语言

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.等等等。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: