没有合适的资源?快使用搜索试试~ 我知道了~
白手起家Win32SDK应用程序
需积分: 9 13 下载量 98 浏览量
2011-04-11
13:39:50
上传
评论
收藏 506KB PDF 举报
温馨提示
试读
35页
用一个简单的建立一个单窗口的WIN32的程序,来介绍WIN32程序设计的基本概念和步骤
资源推荐
资源详情
资源评论
《白手起家 Win32SDK 应用程序》第一篇 预备知识
1 说在前面
由于 VC6 及 MFC 的特点,我们许多人从标准 C++学习到 VC6MFC 应用程序的编程
学习的过度会有一个很大的夸跃,从而感到非常的吃力。
究其原因之一:MFC 类库设计虽然精巧,但我们在使用 MFC 设计程序时,会发现 MFC
到处是 API 函数的影子。MFC 并没有象 Delphi 的 VCL 类库, VB 的控件库一样封装得让
人几乎完全不用知道还有 Win32API 函数及其操作原理,所以要想利用 VC6 的 MFC 编程,
我认为就一定要先学习如何直接用 Win32API 函数来编程。对 API 编程中的一些关键的概
念和原理要有一定认识,这样才会有一个比较平滑的过渡。以上就是我写这个系列的初衷。
2 我假设你已有的知识:
这里我假设你已经掌握了如下的知识,如果你在如下方面知识有点不太清楚,那要去补
一补罗,否则你看到相关的内容时会有麻烦的。
下面说是我对你知识的假设:
2.1 Windows 系统的文件、文件夹、路径的概念
2.2 C 语言的基本知识(基本以等级考试二级 C 语言为准,还要有所扩充)
2.2.1 指针的概念。
2.2.2 函数指针概念。
2.2.3 各种自定义类型(最重要的是 struct 类型)的概念。
2.2.4 要知道函数的各种参数传递形式(值、地址、引用传递)。
2.2.5 typedef 及其应用。
2.2.6 #include 及其应用。
2.2.7 十进制、二进制、十六进制。
2.2.8 按位与、或、非运算的实质。
2.2.9 宏定义概念、使用及意义。
(每个人总是学完了 C 或 C++语法后才会开始用 VC6 进行 Windows 编程学习的。但
是你的基础又是如何呢?这是一个关键。因此我对你的 C 知识做了具体的假设。)
2.3 会安装 VC6.0 并安装到一台机上
2.4 VC6 编译界面的各组成部分及基本操作(至少会用 VC6 写控制台程序)。
2.5 VC6 调试中至少要会设置断点哦。
(呵呵!我的要求不过份吧!)
3 还必须预备的知识:
以上知识是你看本系列的前提,不过我还要给你预备一下我们再这个阶段学习中会遇到
的新东西。
3.1 你将会接触到的 Win32API 函数库:
以前的 DOS 下或 Windows 的控制台程序下,你要在显示器上输出文字,要用 printf(),
或 cout 的函数对象来完。但如果你要显示一个图形或图象或为你的程序设计一个图形化的
操作界面等等的,那可就惨了,一切都要你自已完成。复杂得很了!(唉!谁叫 DOS 是字
符界面的操作系统呢!)
现在好了,在 Windows 下编程你可就轻松得多了。因为 Windows 操作系统都为我们
准备好了,它提供给我们多达数千个函数(啊!我要昏倒了。这么多的函数要学。),我们
通过这些函数来操作 Windows 系统提供给我们的各种功能。比如我要在桌面上创建并显示
一个窗口。就只要调用几个相关的被称为 API 的函数,让 Windows 来帮助我们完成这些
事。我们是通过这些函数与 Windows 系统交互的,所以这些函数被称作 Win32 应用程序
接口函数,简称 Win32API 函数。
请不用害怕哟!其实,这么多的函数我们不必都马上一一学过,只要掌握了不多的具有
代表性的函数的使用方法,并知道大体 API 函数都提供了哪些功能就可以了。以后要用时
再去查。
Window 拥有现成的各种各样的系统功能,供我们的程序调用。那么又是通过什么方
式来调用这些系统功能呢?原来,Window 还现成提供一个接口,好让我们的程序来使用
这些系统功能,这个结口就是 Win32API 函数了(注:API 是应用程序接口的英文缩写)。
Win32API 函数是我们的应用程序与 Windows 系统交互的唯一途径。
我并不打算这时就介绍任何一个具体的 API 函数。你现在只要知道你又要接触一个函
数库了——被称为 Win32API 的函数库,如同你以前所学的 C/C++函数库。
哈哈,这真是太好了,我们不用再象 DOS 一样,自已来完成程序界面的绘制了。我们
现在又增加一个全新的函数库,只要调用几个相关 API 函数,剩下的一切由 Windows 来
完成就可以啦!(当然还有很多其它功能。)
3.2 “新”的数据类型:
学完 C、C++之后,我们就可以开始进入 VC6 的 Windows 编程学习了。但是在接下
来的学习中我们会发现在 Windows 编程中有许多“新”的数据类型。看下面:
BOOL、BYTE、INT、UINT、WORD、DWORD、FLOAT、CHAR、LPSTR、HINSTANCE、
HWND、HMENU、HICON 等等。
你看这些大写的数据类型,你以前有见过吗?还有很多哦!我们以后的学习过程中还会
见到的。(呵呵!你可要有思想准备了!)
这真是让我们初学者迷惑呀!难道 VC6 中对 C/C++的基本数据类型又有重大的扩充
了吗?
其实不用害怕,只是用新瓶装旧酒而已了。在 VC6 的 windef.h 头文件中已有这些定
义:
typedef int BOOL;
typedef unsigned char BYTE;
typedef int INT;
typedef unsigned int UINT;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef float FLOAT;
在 winnt.h 中有
typedef long LONG;
typedef char CHAR;
typedef CHAR *LPSTR, *PSTR;
你看其中(粗体字)CHAR 只不过是 char 的别名而已,也就是说它们是等价的。只要
你包含了相关的头文件,然后你就可以这样申明一个变量:
INT i; //等同于 int i;
CHAR a; //等同于 char a;
LPSTR pa; //等同于 char *pa;
明白了吗?
我想你一定会问:为什么要这样转义呢?我们直接用 int 、unsighed int、char 等等
不就行了吗?我一句两句也说不清,你只要知道,微软这样做一定是要道理的。
哦!还有这些 HINSTANCE、HWND、HMENU、HICON 我没说呢!今后你还会见到
许多这样以 H 为开头的数据类型,下面就让我在下一节的“句柄”概念中说给你听。
3.3 “句柄”概念
由 windows 系统创建出来的或加载的对象(如应用程序进程、线程、窗口、菜单、图
标、光标等等的对象),windows 系统都会分配给它们一个唯一的标识值,作为这些对象
的标志,称之为句柄。我们程序中对这些对象的操作其实就是对其句柄的操作。请记住,句
柄就是这些对象的“代号”了。
在编程序中,我们需要用相应的句柄变量来保存这些句柄值,那么用什么类型的句柄变
量呢?
就是我们前面提到过的 HINSTANCE、HWND。
像其它变量一样(如:int a;)申明句柄变量,如下:
HINSTANCE hst; //hst 变量可以保存某个应用程序实例(即一个进程)的句柄。
HWND hwFirst; //hwFrist 变量可以保存某个窗体句柄。
HMENU hMenu; //hMenu 变量可以保存某个菜单句柄。
HICON hIcon; //hIcon 变量可以保存某个图标句柄。
具体的使用让我以后再慢慢与你道来啦。
那么这些类型的实质又是什么?
目前,它们都只是一个 int 类型(小语:我听说微软也许以后会改变它的类型)。不过
不管怎样,你现在只要把 HINSTANCE、HWND、HMENU、HICON 当做是一个独立的数
据类型就可以了。
3.4 消息标识
Windows 系统是一个基于消息的系统。这样的机制导致我们的程序与以往 DOS 下的
程序流程会有很大的不同。(这可是很考我们的智慧喽!)
从软件使用者角度看一个 Win32 窗口程序运行的过程:
1) 我们运行一个应用程序,程序创建并显示一个我们想要的程序窗口。
2) 当我们对窗口进行操作时(如单击、双击、右击、按下键盘、最大化、最小化、关
闭窗口等等),程序会完成特定的操作,如:单击最大化、最小化按钮时,窗口会最大化、
最小化操作;对窗口中菜单项的选取时,会完成该菜单的相应功能。
从程序员的角度看一个 Win32 窗口程序运行的过程:
1) 我们运行一个应用程序,程序中我们通过 Win32API 函数创建并显示一个我们想要
的程序窗口。(由我们的程序来调用函数实现)
2) 当我们对窗口进行操作时(如单击、双击、右击、按下键盘、最大化、最小化、关
闭窗口等等),窗口会自动产生一系列相应的消息(这是由操作系统实现的)。
3) 具体地讲:当我们改变窗口大小时,会产生 WM_SIZE 消息;单击关闭按钮关闭窗
口时,会产生 WM_CLOSE 消息;选取某一菜单项时,会产生 WM_COMMAND 消息;按
下键盘时,会产生 WM_CHAR、WM_KEYDOWN、WM_KEYUP 消息;单击鼠标左键时,
会产生 WM_LBUTTONUP、WM_LBUTTONDOWN 消息等等。啊,很多很多,我也不必
全部罗列出来了。(我说过了,这些都是由操作系统实现的)
4) windows 系统会将这些消息排入我们窗口所在线程的消息队列中(你会明白线程是
什么吗?)(也由 Window 操作系统实现),这样我们的程序才有机会获取并处理这些产
生的消息。
5) 我们的程序可以通过 Window 操作系统提供的 API 函数来获取这些消息及相关的
信息。然后通过我们学过的条件判断语句来判断是什么消息及其相关的操作信息并可编写相
应的程序代码,从而实现对窗口操作的不同反应。(由我们的程序来实现)
看上述的过程描述,你可能要有点的抽象思维能力了。你现在只要有对程序流程有如上
的大体认知就可以了。慢慢地我会将上述流程变成确实的程序代码噢!
( 等等,还是有个问题:这些 WM_CLOSE、WM_COMMAND、WM_CHAR、
WM_KEYDOWN、WM_KEYUP、WM_LBUTTONUP、WM_LBUTTONDOWN 等等的以
WM_开头的消息到底又是什么东西呢?)
看 VC6 的头文件 winuser.h 中的片段:
……
#define WM_CLOSE 0x0010
……
#define WM_LBUTTONDOWN 0x0201
#define WM_LBUTTONUP 0x0202
#define WM_LBUTTONDBLCLK 0x0203
#define WM_RBUTTONDOWN 0x0204
……
#define WM_KEYDOWN 0x0100
#define WM_KEYUP 0x0101
#define WM_CHAR 0x0102
……
#define WM_INITDIALOG 0x0110
#define WM_COMMAND 0x0111
#define WM_SYSCOMMAND 0x0112
……
哦!这些 WM_开头的所谓的消息只不过是一系列 16 进制整型数值的符号常量而已。
每一个不同的整型数值代表着一个窗口某一操作的标识,因此我们将这些数值或者说以
WM_开头的符号常量称之为消息了。
也就说,我们在窗口中作各种不同的操作,Windows 系统会产生各种相应的数值。我
们就是通过条件语句比较这些数值来判断我们在窗口中所做的操作的。
3.5 资源标识
(你看我没完没了地介绍一个个概念,觉得烦不烦?不用你说,我自已也有点烦了。唉!
不过这些似乎是必要的,所以我不得不坚持下去。不过,还好,剩下的不多了。)
那么 VC6 中资源是什么一种概念呢?
我们的程序中可能要用到各种图标(*.ico 文件)、各种形状的鼠标(*.cur 文件)、各
种图像(*.bmp/*.gif 等等)、各种声音(*.wav 等)、各种菜单……,这些就是我们这里所说
的资源了。
每一个要用到资源,我们都要给它分配一个编号或名称,作为这个资源的标识。之后我
们的程序只是通过这个编号或名称来访问这些资源了。所以这些编号或名称我们称之为资源
标识。好了,现在你也只要有了一个大体的映象就可以了,具体的形式和应用让我慢慢再与
你说了。
(各位可以提出你的疑问,白云小飞一定会尽力回复的。)
啊!终于结束冗长的概念解说了,看到这里,请先回顾一下我们前面讲的东西。然后嘛
——我们可以开工啦!。
《白手起家 Win32SDK 应用程序》第二篇 创建 Win32 工程和主函数
1 在 D:\创建一个空的工程(工程名为 MyApp)
要编写一个程序,我们就要首先用 VC6 应用程序向导创建一个工程,下面我将给你创
建一个空工程(也就是没有任何源文件及代码的工程)
1.1 操作:
=>文件->新建…->”工程”标签->位置:”D:\”(你可以设置你想要创建的位置)->工程
名:MyApp(你可以自己指定其它名)->选择”创建新的工作空间”->确定->一个空工程->
完成
1.2 请查看指定位置下生成的文件:打开 D:\MyApp
我们发现,它在 D:\下生成了一个 MyApp 文件夹。
并在 MyApp 文件夹下生成了几个文件,如下:
MyApp.dsp
MyApp.dsw
MyApp.ncb
MyApp.opt
其中,MyApp.dsp 是项目文件和 MyApp.dsw 是工作区文件,它们是不能删除。
项目文件的作用:生成一个 EXE 或 DLL 程序的所有相关源文件、有头文件的位置信息
都记录在 MyApp.dsp 项目文件中。
工作区文件的作用:如果一个复杂的软件工程可能是由多个 EXE 和多个 DLL 程序组成,
这样每个项目文件的位置信息又记录在 MyApp.dsw 工作区文件中。
当然,我们的这个工程只有一个 EXE 程序,所以只有一个项目,这个项目文件
MyApp.dsp 也同样要记录在 MyApp.dsw 中了。
MyApp.ncb 和 MyApp.opt 虽删除后会自动生成,但是还是请不要这样做哦!以后我
还会说它们的作用。
我们下次要编辑源程序时,只要打开工作区文件 MyApp.dsw 就可。
2 在 D:\MyApp 下创建一个 C++源文件,文件名为 MyAppMain(当然你也可以自己
定义一个文件名),并同时加入到 MyApp 工程中
2.1 操作:
=> 文件-> 新建…->” 文件” 标签-> 选 ” 添加到工程”-> 选 ”MyApp”-> 文件
名:MyAppMain->”位置”默认->确定
2.2 查看指定生成的文件:
可以看到,在 D:\MyApp 文件夹下生成了 MyAppMain.cpp 源文件。
3 在 MyAppMain.cpp 文件中输入一个主函数
3.1 代码如下:
剩余34页未读,继续阅读
资源评论
tjbloeao
- 粉丝: 1
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功