Win32编程系列一
一、创建一个工作区
工作区就是用来存放程序员项目的地方,在菜单中按如下方式依次点击:file->new->Workspace标签,然后Location文本框中输入你要创建的工作区的位置,我这里将我的工作区目录设置为F:\WIN32R,然后给自己的工作区起个名字,我这里取名day01
二、windows 开发用到的头文件和windows开发用到的库文件简单介绍
Windows库和头文件
- Windows库
kernel32.dll - 提供了核心的API,例如进程、线程、内存管理等。
user32.dll - 提供了窗口、消息等API
gdi32.dll - 绘图相关的API
-头文件
windows.h - 所有windows头文件的集合
windef.h - windows数据类型
winbase.h - kernel32的API
wingdi.h - gdi32的API
winuser.h - user32的API
winnt.h - UNICODE字符集支持
三、一个简单的windows窗口程序
先不管这个窗口程序是怎么实现的,照着书本炒一个简单的windows窗口程序,这个窗口程序只弹出来一个对话框,在对话框上显示一串"welcome to the world of windows!"文字。写这个程序之前对用到的两个函数做个简单介绍。
int WINAPI WinMain(
HINSTANCE hInstance,//当前程序的实例句柄,凭借这个参数可以找到内存中关于窗口的数据,比如位置,宽高
HINSTANCE hPrevInstance, //当前程序前一个实例句柄
LPSTR lpCmdLine,//命令行参数字符串
int nCmdShow //窗口的显示方式,
);
注:hPrevInstance - Win32下,一般为NULL
int MessageBox(
HWND hWnd,//父窗口句柄
LPCTSTR lpText, //显示在提示框中的文字
LPCTSTR lpCaption, //显示在标题栏中的文字
UINT uType //提示框中的按钮、图标显示类型。肯定有人有疑问,一个参数如何指定按钮的个数,图标,其实查看msdn,可以发现这个参数有很多值来指定要显示的按钮,图标,并以位或的形式指定多种方式。
);// 返回值为点击的按钮ID
下面是完整的代码:
#include "stdafx.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MessageBox(NULL,"welcome to the world of windows!","info",MB_OK);
return 0;
}
下面是完整的截图:
四、编译环境的配置
注意这是手工在DOS界面进行程序编译连接的环境配置,一般不用,但是还是值得说一下,用一个简单的例子说明
1 用记事本编写一个hello.txt文件,内容如下
#include "windows.h"
int WinMain(HINSTANCE hIns,HINSTANCE hPrev,LPSTR lpCmdLine,int nCmdShow)
{
MessageBox(NULL,"hello world","info",MB_ABOUTRETRYIGNORE|MB_ICONQUESTION);
}
2 将hello.txt的后缀改为.c,即hello.c
3 打开DOS窗口,具体的方法是,依次点击“开始->运行”,然后输入cmd,回车,DOS窗口打开了。
4 在命令行键入 CL.EXE /?命令,这一句命令表示打印CL.EXE命令的信息,如果环境配置正确,那么DOS窗口中会输出很多信息,如下图
如果报错,将路径C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT的批处理文件copy一份到你自己的工作区文件夹,我的工作区位置为:f\win32r\day01,
a 然后在终端窗口切换到你的工作区目录,执行刚刚拷过来的批处理文件,具体如下(我这里以我的路径为例),依次键入:f -> cd win32r -> cd day01 -> VCVARS32.BAT
b 最后在命令终端执行 CL.EXE /?命令,看是否正常
执行命令CL.EXE /c hello.c(表示只编译不连接)
如果执行正确,那么生成hello.obj,接下来连接WinMain()和MessageBox()这两个函数所在的库(共有三个库user32.dll,gdi32.dll,kernel32.dll)
执行命令LINK.EXE hello.obj user32.lib(连接命令)
执行成功就会生成一个hello.exe文件。
双击执行hello.exe文件,就会弹出来一个MessageBox对话框,这个对话框如果不点击按钮,就会一直存在,专业名词就是阻塞,这个函数是一个阻塞函数。点击之后,该函数返回被点击按钮的ID。
如果报错,将路径C:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT
的批处理文件copy一份到你自己的工作区文件夹,我的工作区位置为:f\win32r\day01,然后在终端窗口依次键入:f->cd win32r->cd day01->VCVARS32.BAT,问题解决。
再在命令终端执行 CL.EXE /?命令,这条命令的意思是打印CL.EXE这个命令的信息。
CL.EXE /c hello.c(只编译不连接)
如果执行正确,那么生成hello.obj,接下来连接WinMain()和MessageBox()这两个函数所在的库(共有三个库user32.dll,gdi32.dll,kernel32.dll)
LINK.EXE hello.obj user32.lib
执行成功就会生成一个hello.exe文件。双击执行hello.exe文件,就会弹出来一个MessageBox对话框,这个对话框如果不点击按钮,就会一直存在,专业名词就是阻塞,这个函数是一个阻塞函数。点击之后,该函数返回被点击按钮的ID。