windows程序设计学习笔记1--新建程序骤

来源:互联网 发布:天书世界披风数据 编辑:程序博客网 时间:2024/06/03 17:55

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++还有筛选功能

 

 

中间回头再补上


 

GDI (Graphics Device Interface):
图形设备接口
负责在显示器和打印机上显示图形。
系统和程序都要用这个接口,他就是个.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就一样

0 0