在我以前学习C、C++、Windows编程的时候,很有一些疑惑,当时找不到人解答,都是过了很多年以后才想通,我想,初学的朋友可能都有这样的疑惑,这里总结出来,希望对大家有参考价值。
1、Windows的窗口和C++的类是什么关系?
没有关系,纯C方式编程,WinMain,也是可以产生窗口的,不是说一个窗口一定要一个类,仅仅是通常这么做而已。
2、Windows的线程和C++的类是什么关系?
没有关系,同理,纯C可以开发Windows应用,当然也可以开发线程,事实上,在线程的开发上,C++用的是C的方法,就是类里面的静态函数,或者全局函数啦。
3、Windows的窗口和线程是什么关系?
没有关系,Windows的窗口是窗口,线程是线程。他们都是一个软件工程的组成部分,线程函数可以放在窗口类里面,也可以不放。
4、Windows的窗口是不是一定要有独立的消息循环?
没必要,看看模态窗口和非模态窗口,一个窗口,可以利用父窗口的消息循环,来给自己通知消息,怎么通知,swtich的最后一项,default的时候,call一下子窗口的消息循环函数啊。其他的消息,如果需要子窗口处理,也可以这么做啊。
5、Windows的消息循环可不可以放到线程里?
当然可以,虽然Windows为每个应用程序准备了一个主线程,消息循环可以放到里面运行,但新开的子窗口,完全可以自己建立线程,开辟消息循环。
6、消息循环和线程什么关系?
没有关系,消息循环就是不断从本窗口的消息队列里面取消息,并处理的过程,除非被别人调用,否则自己不会运行,可以在主线程里面调用,当然也可以在其他线程里面调用。
7、一个Windows程序是不是只能有一个窗口?
当然不是,想开多少个都可以,只要系统内存还吃得下,CreateWindowsEx,还记得吗?
8、开窗口是不是一定要写个类?
当然不是,回到第一个问题看看。
9、是不是写Windows窗口一定要用文档、视结构?
当然不是,微软对大家有误导,好像一个应用工程的数据一定要放在CDoc里面,界面只能由CView处理,自己写个类,甚至写个全局数组,也可以放数据的,我就在Timer里面重绘,也可以直接显示的。仅仅是一种习惯性思维而已。
10、没有Printf,很不爽!
试试TRACE,再就是,做个EditBox,向里面添加数据试试,方法很多啦,仅仅是没有控制台而已。
11、画界面很累,Tab顺序太烦
可以画个界面,在里面通过SetFoces,自己定义Tab顺序的,方法太多了。
12、是不是只有用MFC才能开发Windows程序?
当然不是,MFC仅仅是微软为了方便大家使用C++方式,开发Windows程序设计的一套应用程序框架而已,大家可以用,也可以不用。最古老的Windows程序可全是C模式的。
13、VC和MFC什么关系?
没有关系,VC可以不用MFC的,别的C++语言也可以用MFC的。
14、为什么VC添加方法,有时候会失败,为什么VC生成的类,老是缺一些东西?如果添加一个类方法或成员变量,VC不给我自动生成咋办?
你看见的是IDE,VS的编辑器,编辑器为了方便大家,提供了一些自动代码生成功能,但是,并不完善。不自动生成,自己敲就好了,本来C++程序,都是自己敲的,除了VC。
15、是不是一定要进VC,才可以写Windows程序?
哪有?你看到的VC仅仅是IDE,VC是VC,VS IDE是VS IDE,你直接用记事本敲段程序,cc,然后link,照转。gcc就不提供IDE,直接make。
16、VC的release模式下,不提供单步跟踪功能,其他的C语言,也没有IDE,我咋Debug?
最古老的C语言,就是一个cc编译器,连连接都用操作系统的link,IDE都是后来的,没有单步跟踪,就没法做事啦?跟踪无非是看变量的值,关键点上,自己用printf打印,屏幕打印太快,看不清楚,就用fprintf打印到文件就好了,然后慢慢看。我们都是这么做的,叫printf大法!
17、Debug和Release究竟有啥区别?
这实际上是两种内存管理模式,各有不同的内存堆对象负责分配内存。Debug的堆支持很多调试信息,相应的速度就慢点,还有,栈比较小,递归最多2000层,但有个好处,程序bug最多把自己挂死,系统没事,Release直接就用系统的,速度快,限制少,程序bug可以直接把系统挂翻,就这么简单。
18、全屏幕窗口咋做?
获得屏幕尺寸,比如800*600,把窗口大小设置为尺寸+6,就是806*606,然后把窗口左上角移动到-3,-3,全屏幕。高兴了还可以SetTop,独占前台,呵呵。
嗯,临时想到就这么多,以后想到再补充,也欢迎大家补充哈。
MFC十八个简单问题
最新推荐文章于 2018-05-08 11:01:44 发布