目标:
- 了解windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;
- 掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;
一、Windows API函数
API的英文全称是Application Programming Interface,WIN32 API也就是Microsoft Windows 32位平台的应用程序编程接口。
二、使用Windows API创建窗体
(一)完整代码
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(
HWND hwnd, //窗口句柄,消息的所属窗口
UINT message, //消息标志
WPARAM wParam, //附加信息
LPARAM lParam
);
//定义入口函数winmain()
int WINAPI WinMain( //
HINSTANCE hInstance, //应用程序实例
HINSTANCE hPrevInstance, //上一个应用程序实例
LPSTR lpCmdLine, //命令行参数
int nCmdShow //窗口显示的方式
)
{
//设计窗口类
WNDCLASS wc;
wc.cbClsExtra=0; //类的附加信息
wc.cbWndExtra=0; //窗口的附加信息
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //背景色
wc.hCursor=LoadCursor(NULL,IDC_CROSS); //不采用默认光标
//wc.hCursor=NULL; //采用默认光标
//wc.hIcon=NULL; //采用默认图标
//wc.hIcon=LoadIcon(NULL,IDI_WARNING); //加载系统图标
wc.hIcon=LoadIcon(NULL,IDI_ERROR); //图标
wc.hInstance=hInstance; //应用程序的实例
wc.lpfnWndProc=WndProc; //窗口过程函数名称,消息处理函数
wc.lpszClassName="Windows"; //类的名字
wc.lpszMenuName=NULL; //菜单名字 空或者默认
wc.style=CS_HREDRAW | CS_VREDRAW; //显示风格
//注册窗口类
RegisterClass(&wc);
//创建窗口类
HWND hwnd;
hwnd=CreateWindow("Windows","The first Window",WS_OVERLAPPEDWINDOW,
0,0,600,400,NULL,NULL,hInstance,NULL);
//显示和更新窗口
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd);
//消息循环
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg); //翻译工作
DispatchMessage(&msg); //给操作系统分发消息
}
return 0;
}
LRESULT CALLBACK WndProc(
HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam
)
{
switch(message)
{
case WM_CHAR:
char szChar[20];
sprintf(szChar,"char is %d",wParam);
MessageBox(hwnd,szChar,"window",0);
break;
case WM_LBUTTONDOWN:
MessageBox(hwnd,"下一个!","window",0);
HDC hdc;
hdc=GetDC(hwnd);
TextOut(hdc,0,50,"天天向上!",strlen("天天向上!"));
ReleaseDC(hwnd,hdc);
break;
case WM_PAINT:
HDC hDC;
PAINTSTRUCT ps;
hDC=BeginPaint(hwnd,&ps);
TextOut(hDC,0,0,"好好学习!",strlen("好好学习!"));
EndPaint(hwnd,&ps);
break;
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的结束?","window",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,message,wParam,lParam);
}
return 0;
}
(二)效果图
开始界面
点击鼠标
退出