第一天:
WINDOWS应用程序一定要有WinMain函数,该函数用来完成一些特殊的任务,象创建程序的主窗口,主窗口用来处理消息的代码。MFC将WinMain隐藏在框架中,不象写SDK程序时可以很容易的找到它。
WINDOWS采用的消息处理机制也交给了程序框架,我们不必担心如何使这些消息和代码联系起来。并且WINDOWS定义好了一些消息,当窗口被创建时系统就会发送WM_CREATE消息,当点击鼠标左键时便系统会发送WM_LBUTTONDOWN消息,当用户按下键盘时系统会发送WM_CHAR消息,当用户关闭窗口时系统会发送WM_CLOSE消息,当用户进行菜单项选择或单击按钮时系统会发送WM_COMMAND消息,什么都不做系统还会发送WM_TIMER消息。
注:WM_TIMER:定时器消息,当你用SetTimer来设置一个定时器时,假设你设置的时间间隔是1秒,那么你就会每隔1秒收到一个WM_TIMER消息。你对这个消息加以处理,就可以实现每隔1秒运行某段代码了。
WINDOWS提供通用的图形设备接口(GUI),我们通过调用(GDI)函数和硬件打交道,不必理会设备环境,WINDOWS会自动将设备环境结构映射到相应的物理设备,这应该就是设备无关性吧。
注:图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。
GDI是图形设备接口的英文缩写(Graphics Device Interface).
动态连接库(DLL)应该是代码重用的典型例子(不知道可不可这样说),把一些模块、自己新编的类单独调试并编译成DLL,及增加代码的可读性也提高了程序模块的灵活性。
用Developer Studio建立项目Developer Studio会创建很多中间文件,这些文件还是有必要说一下的。
APS //支持ResourceView
BSC //浏览器信息文件
CLW //支持ClassWizard
DSP //项目文件,不能删除和用文本编辑器编辑
DSW //工作空间文件,不能删除和用文本编辑器编辑
MAK //外部的创建文件
NCB //支持ClassView
OPT //保存工作空间的配置
PLG //建立日志文件
这些文件都有一定的作用,拿CLW来说,如果你有一个新类,需要加到ClassWizard中,除了将相应的.h 和.cpp加到DSP中还需要重新编译CLW。PLG文件记录着你的项目配置信息。
VC++的源程序浏览器能够使我们从类或函数的角度来了解或编辑程序,而不是直接从文件入手。在看别人的源代码时如果能熟练的使用源代码浏览器将会事倍功半。源程序浏览器主要的查看状态有以下几种:
Definitions and References——选择任何函数、变量、类型、宏定义可以看到它在项目中的定义,并且在何处和什么地方用到它。
Call Graph/Caller Graph——对于所选择的函数,给出它的调用与被调用函数的图示。
Derived Class Graph/Base Class Graph——给出类层次关系的图形表示,可以看到所选择的类的派生类和基类以及成员。
File Outline——对于所选的文件,列出文件中的类、函数和数据成员,同时还显示它们定义的位置和使用位置。
可见Source Brower比起Class View来功能多了很多也更加好用,以前我就不知道,因为一般的VC++书没有讲或根本没有注意这块,看到讲菜单、操作界面、编辑器时总是跳过,心想“没吃过猪肉还没见过猪跑?这种东西不用学就会”。可实际上还是应该仔细的看看的。
------------------------------------------------------------------------------------------------------------------------------------------------
刚入门windows编程的时候,只会在vc IDE里拖拖控件,编译运新一下,能弹出个对话框,就以为自己会windows编程了。现在想起来觉得很可笑。参加工作后,接触和使用过开发工具PB,VB,Delphi,VC,慢慢对windows编程有了个大致的了解。由于工作的需要,近期着重于GDI的编程,有点小体会,就此抛砖引玉。
注意windows的dc是有很多种的。具体可以参照一下microsoft的WTL里的atlgdi.h 文件。它把dc主要分为3种:CPaintDC,CClientDC,CWindowDC etc.其实这些dc都是不同应用环境下的。从本质上讲,是一样的。了解dc是进入gdi领域的关键,gdi是window比较核心的一部分,是window窗口的基础东西。