Window API程序设计(窗口创建)
目的
1、了解 windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;
2、掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;
步骤
一、窗口的创建
二、消息循环
三、过程函数
四、窗口程序实例
#include <windows.h>
LRESULT CALLBACK Message(HWND hWnd, UINT M, WPARAM wParam,/*16位*/ LPARAM lParam/*32位*/);
//1)定义WinMain函数
int WINAPI WinMain(HINSTANCE hInstance, //应用程序的入口
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow //窗口显示的样式, 最大化,最小化
{
//2)设计窗口类WNDCLASS(给成员变量赋值)
WNDCLASS wd;
wd.cbClsExtra = 0;
wd.cbWndExtra = 0;
wd.hbrBackground = CreateSolidBrush(RGB(0, 0, 0));
wd.hCursor = LoadCursor(NULL, IDC_HAND);
wd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wd.hInstance = hInstance; //告诉主窗口正在使用的是哪个实例。
wd.lpfnWndProc = Message; //调用消息处理函数
wd.lpszClassName = TEXT("zuoxiwei"); //类的名字
wd.lpszMenuName = NULL; //菜单
wd.style = CS_HREDRAW | CS_VREDRAW;
//3)注册窗口类
RegisterClass(&wd);
//4)窗口类
HWND hWnd = CreateWindow(TEXT("zuoxiwei"), TEXT("zuoxiwei"),
WS_OVERLAPPEDWINDOW,
500, 200, 600, 400,
NULL, NULL, hInstance, NULL); //父窗口的句柄、主菜单的句柄、应用程序实例句柄
//5)显示和更新窗口
ShowWindow(hWnd, SW_SHOWNORMAL);
UpdateWindow(hWnd);
//5)消息循环
MSG msg;
//如果接受到WM_QUIT, 返回0, 退出; 如果出错,不退出
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);//翻译
DispatchMessage(&msg);//给操作系统分发消息
}
return msg.wParam;
}
//6)处理消息函数,处理消息
LRESULT CALLBACK Message(HWND hWnd, UINT M, WPARAM wParam, LPARAM lParam)
{
switch (M) {
case WM_RBUTTONDOWN: //单击鼠标右键
MessageBox(hWnd, TEXT("鼠标点击"), TEXT("确定"), MB_OK);
break;
case WM_CLOSE: { //关闭
if (IDYES == MessageBox(hWnd, TEXT("是否真的结束?"), TEXT("是否关闭"), MB_YESNO))
DestroyWindow(hWnd);
break;
}
case WM_PAINT: { //绘图
PAINTSTRUCT ps;
HDC dc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
}
case WM_DESTROY:
PostQuitMessage(0); //WM_QUIT, 给主函数返回 msg.wParam
break;
default:
return DefWindowProc(hWnd, M, wParam, lParam);
}
return 0;
}
鼠标点击效果如下
点击键盘按键
点击关闭按钮