VC6.0建立新程序的方式
首先,从File菜单中选New。在 New对话框中,单击Projects页面标签,选择 Win32 Application。在Location栏中,选择一个子目录,在 Project Name栏中,输入该项目的名称,此时该名称是HelloMsg,这便是在 Location栏中显示的目录的子目录。Create New Workspace复选框应该勾起来,Platforms部分应该显示 Win32,选择OK。
将会出现一个标题为Win32 Application - Step 1 Of 1的对话框,指出要建立一个Empty Project,并按下Finish按钮
其次,从File菜单中再次选择New。在 New对话框中,选择Files页面标签,选择 C++ Source File。Add To Project复选框应被选中,并应显示HelloMsg。在 File Name栏中输入HelloMsg.c,选中OK。
最后,当您准备编译HELLOMSG时,您可从「Build」菜单中选择「 Build Hellomsg.exe」,或者按F7,或者在「 Build」工具列中选择「Build」图示。(该图示的外观显示在「 Build」菜单中。如果当前没有显示「Build」工具列,您可从「 Tools」菜单中选择「Customize」并选择「 Toolbars」页面标签,选中「Build」或者「 Build MiniBar」。)另一种方法,您可从「Build」菜单中选择「Execute Hellomsg.exe」,或者按「Ctrl+F5」,或者在「 Build」工具列单击「Execute Program」图标(该图标看上去像一个红的感叹号),就会弹出一个消息框询问是否编译该程序。
说明:正常情况下,在编译阶段,编译器从C原始码文件产生一个.OBJ(目标)文件。在连结阶段,连结程序结合.OBJ文件和.LIB(库)文件以建立.EXE(可执行)文件。通过在「 Project」页面标签上选择「Settings」并单击「 Link」页面标签可以查看这些库文件的列表。特别地,您会注意到KERNEL32.LIB、USER32.LIB和GDI32.LIB。这些是三个主要Windows子系统的「引用链接库」。它们包含了动态链接库的名称以及放进.EXE文件的引用信息。Windows使用该信息处理程序对
KERNEL32.DLL、USER32.DLL、GDI32.DLL动态链接库中函数的呼叫。
在Visual C++ Developer Studio中,您可用不同的设定编译和连结程序。内定情况下,它们是「Debug」和「Release」。可执行文件被存放在以这些名称命名的子目录下。在Debug设定下,信息被附加到 .EXE文件中,这些信息有助于测试程序和
追踪原始码。
如果您喜欢在命令列下工作,附上的CD-ROM包含所有范例程序的.MAK(make)文件。(可通过「 Tools」菜单选择「Options」,再选择「 Build」页面标签,来告诉Developer Studio生成make文件。这里有一个复选框需要勾选)。您需要执行在Developer Studio的BIN子目录下的VCVARS32.BAT来设置环境变量。要从命令列执行make文件,可以转到HELLOMSG目录并执行:
NMAKE /f HelloMsg.mak CFG="HelloMsg - Win32 Debug"
或者
NMAKE /f HelloMsg.mak CFG="HelloMsg - Win32 Release"
然后您可通过输入:
DEBUG\HELLOMSG
或者
RELEASE\HELLOMSG
从命令列执行.EXE文件。
我已经在本书附上的CD-ROM中对项目文件中的内定Debug设定做了一个改动。在「 Project Settings」对话框中,选择「C/C++」页面标签后,在「 Preprocessor Definitions」栏中,我已定义了标识符UNICODE。
第一个windows程序
例 HWND hwnd ;
如果要 HWND 的定义可以右击选 Go To Definition of HWND (到定义处)。也可以按F1,查msdn..选 Windows User Intarface : Flatform SDK (软件开发工具包)
spy++还有筛选功能
中间回头再补上
图形设备接口
负责在显示器和打印机上显示图形。
系统和程序都要用这个接口,他就是个.dll 一大把函数 若干宏 结构
计算机图形输出设备分为两大类:
光栅设备(Raster devices)。都是以像素为基础的,比方说,显示器,针式打印机,喷墨打印机,激光打印机
矢量设备(Vector devices)。早期一种绘图仪
那么绘图除了GDI还有别的比方说游戏的什么。。。
设备描述表 DC 能过GDI操作 程序员操作HDC 拿到HDC就相当于拿到设备描述表 自己操作自已 准确的说是程序在设备上所拥有的哪块
某种HDC负责无效区,一种绘客户区 还有一种给标题栏和菜单什么的出客户区 还有满屏的
拿到DC就拿到在屏幕上画图能力。不仅是设备,还是你的程序的无效区,客户区,满屏。用HDC使用它
GDI的构成:
1、DC(Device Context设备描述表)
2、GDI函数
3、GDI基本图形
4、其它
GDI函数(约几百个)
从功能上分几大类:
1、取得(或者建立)和释放(或者清除)设备描述表的函数
2、取得有关设备描述表信息的函数
3、绘图函数
4、设置和取得设备描述表参数的函数
5、使用GDI对象的函数
GDI基本图形,分为以下几类:
1、直线和曲线
2、填充区域
3、位图
4、文本
注意:文本分两量一种点阵式,一种失量式
其它方面
映射模式和变换
元文件(Metafile)
绘图区域
路径(Paths)
剪裁绘图(Clipping)
调色板(Palettes)
打印
DC(Device Context设备描述表)
在Windows中代表DC的就是设备描述表句柄
要在一个图形输出设备上绘图时,首先必须获得一个设备描述表句柄。将柄传回给程序时,Windows就赋予了程序使用设备的权限
特别注意:设备描述表句柄的取得和释放必须成对使用,否则会引起严重问题
成对不能跨消息,一次消息相当于一次调用,跨消息就是在两个消息中建立,释放是不行的
取得设备描述表句柄
1、在处理WM_PAINT消息时,使用BeginPaint()和EndPaint()调用
hdc = BeginPaint( hwnd, &ps );
.................
EndPaint( hwnd, &ps );
WM_PAINT消息中必须有这个
这种方法拿到的hdc只能画无效区
变量ps是型态为PAINTSTRUCT的结构(见msdn),该结构的hdc字段是BeginPaint传回的设备内容句柄。PAINTSRUCT结构又包含一个名为rcPaint的RECT(矩形)结构,rcPaint定义一个包围窗口显示区域无效范围的矩形。使用从BeginPaint获得的设备描述表句柄,只能在这个区域内绘图。BeginPaint调用使该区域有效
2、在处理非WM_PAIN消息时取得设备描述表句柄:
hdc = GetDC(hwnd);
................................
ReleaseDC(hwnd, hdc);
这个设备描述表适用于窗口句柄为hwnd的显示区域。这些调用与BeginPaint和EndPaint组合之间的基本区别是,利用从GetDC传回的句柄可以在整个显示区域上绘图。GetDC和ReleaseDC不使显示区域中任何可能的无效区域变成有效
3、取得适用于整个窗口(而不仅限于窗口的显示区域)的设备内容句柄:
hdc = GetWindowDC(hwnd);
.....................
ReleaseDC(hwnd, hdc);
这个设备描述表除了显示区域之外,还包括窗口的标题列、菜单、滚动条和框架(frame)。GetWindowDC函数很少使用,如果想尝试用一用它,则必须拦截处理WM_NCPAINT消息,Windows使用该消息在窗口的非显示区域上绘图。
4、取得设备描述表句柄的更常用的函数是CreateDC:
hdc = CreateDC(pszDrive, pszDevice, pszOutput, pData);
.............................
DeleteDC(hdc);
可以通过下面的调用来取得整个屏幕的设备描述表句柄(可以作出汉王手写板的效果)
hdc = CreateDC(TEXT("DISPLAY"), NULL, NULL, NULL);
5、使用位图时,取得一个“内存设备描述表”有时是有用的(扫雷就可以用此方法);
hdcMem = CreateCompatibleDC(hdc);
.........................
DeleteDC(hdcMem);
呃,这是一个在内存中虚拟的设备要映谢到真实设备上(显示器)
映射
示口:满屏(1024*768),程序窗口,客户区 往哪画由不同的hdc决定 不同的hdc可以画客户区,可以画窗口,可以画满屏。 窗口就是那张逻辑坐标纸(虚拟的)。在窗口上画,widows完成由窗口到示口的映射,画在哪取决于hdc。。。哪么widows怎么由窗口画到示口,也就是方式就是映射模式。最直白的映射模式就是文本模式。mms_text模式。。。还有两个默认的。一个是原点,客户区什么都没做时原点在左上角。示口的东西都用像素。窗口也有原点这么说就在中间。原点都可以移动。在文本模式时,窗口和示口是1比1映射。方向也是对应的。3种英制的,就是一个格是多少英寸。到示口上自动匹配。还有各向同性和各向异性。单位可以自已设置。
鼠标
鼠标一按产生一下电信号,系统处理产生一系列消息 同样,小盒子,射频把数据给两块内存,当转换时发一电信号给系统产生一自定义消息,由InitCard这个函数与小盒子绑定
如果写个struct里面有各种长度的变量如char型 double型什么的 用sizeof求这个struct大小 如果在setting中,选8 BYTE 求出来的比算出来的大,选1BYTE就一样