windows API程序设计(一个简单的窗口)
windows API程序设计(一个简单的窗口)
一、目的
-
windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;
-
掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;
二、工具
Visual C++ 6.0
三、参考资料
《Windows程序设计教程》(郭暤岩、廖琪梅)
四、步骤
- 在新建文件中选择Projects中的win 32 Application,输入Project name中输入新建工程名字,点击ok继续
- 在弹出的窗口中选择 An empty project,点击finish
- 再在新建文件中选择Files中的C++ source file,输入文件名
- 在其中写下代码
- 编译调试
五、代码
#include<windows.h>
//声明WNDExample()函数
LRESULT CALLBACK WndExample(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam);
//编写WinMain()主函数
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPervInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASS wndclass; //定义窗口类型结构变量
HWND hwnd; //定义窗口句柄
MSG msg; //定义消息结构变量
char lpszClassName[]="自己创建的窗口";
//设计窗口类型
wndclass.style = CS_HREDRAW|CS_VREDRAW; //改变窗口大小侧重面
wndclass.lpfnWndProc = WndExample; //窗口函数为WndExample
wndclass.cbClsExtra = 0; //窗口类无拓展
wndclass.cbWndExtra = 0; //窗口类实例无拓展
wndclass.hInstance = hInstance; //注册窗口类实例句柄
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //用箭头光标
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); //背景为黑色
wndclass.lpszMenuName = NULL; //窗口默认无菜单
wndclass.lpszClassName = lpszClassName;
//注册窗口类型
if(!RegisterClass(&wndclass))
return FALSE;
//创建窗口
hwnd = CreateWindow(lpszClassName,
"window窗口创建",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
//显示并刷新窗口
ShowWindow(hwnd,nCmdShow); //显示窗口
UpdateWindow(hwnd); //更新窗口的客户区
//信息循环
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg); //键盘消息转换
DispatchMessage(&msg); //派送消息给窗口函数
}
return msg.wParam; //返回退出值
}
//相应窗口信息
LRESULT CALLBACK WndExample(HWND hwnd,UINT message,
WPARAM wParam,
LPARAM lParam)
{
//根据信息值转相应的信息处理
switch(message)
{
//重画窗口客户区信息处理
case WM_PAINT:
HDC hdc; //定义设备描述表句柄
PAINTSTRUCT ps; //定义绘图信息结构变量
hdc = BeginPaint(hwnd,&ps); //获取要重画的窗口的设备描述表句柄
TextOut(hdc,150,150,"This is a window",20); //输出文本
EndPaint(hwnd,&ps);
break;
//响应鼠标单击信息
case WM_LBUTTONDOWN:
{
MessageBeep(0);
}
break;
//撤销窗口信息处理
case WM_DESTROY:
PostQuitMessage(0);
break;
//其他转默认窗口函数
default:
return DefWindowProc(hwnd,message, wParam,lParam);
}
return 0;
}
运行结果如图:
六、遇到的问题
在调试编译时遇到报错LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main,解决办法是:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows