Windows API程序设计

目的

了解 windows操作系统应用程序开发的基本概念,win32 API函数、消息与事件驱动;
掌握WinMain函数的基本框架,窗口定义、窗口创建、消息循环及窗口过程函数;

创建一个Win32应用程序的步骤:

1.定义 WinMain 函数;
2.设计窗口类 WNDCLASS;
3.注册窗口类;
4.创建窗口;
5.显示并更新窗口;
6.编写消息循环;
7.编写窗口过程调用函数;

#include <windows.h>

//窗口过程函数
LRESULT CALLBACK DealMessage(HWND hWnd, //窗口句柄,消息所属的窗口
	UINT uMsg,	//消息标志
	WPARAM wParam, //附加信息
	LPARAM lParam
)
{
    
    
	switch (uMsg){
    
    
		case WM_LBUTTONDOWN: //鼠标左键按下
			MessageBox(hWnd, TEXT("树叶飞舞之处,火亦生生不息!"), TEXT("鼠标左键按下"), MB_OK);
			break;
		case WM_CLOSE: {
    
    //关闭窗口时响应
			if (IDYES == MessageBox(hWnd, "苦海无涯,回头是岸!", "是否关闭", MB_YESNO))
			{
    
    
				DestroyWindow(hWnd);
			}
			break;
		}
		case WM_PAINT:{
    
    
			PAINTSTRUCT ps; //绘图结构体
			HDC dc = BeginPaint(hWnd, &ps); //开始绘图
			TCHAR * p = L"Hello World!"; //转为宽字节
			TextOutW(dc, 150, 150, p, wcslen(p));//输出
			EndPaint(hWnd, &ps);//结束绘图
			break;
			}
		case WM_DESTROY:
			PostQuitMessage(0); //WM_QUIT, 给主函数返回 msg.wParam
			break;
		default:
			/* 该函数对未被处理的消息提供默认响应 */
			return DefWindowProc(hWnd, uMsg, wParam, lParam);
		}
	return 0;
}


//WINAPI: 修饰函数,规定函数参数入栈从右往左,函数调用完毕,自动清理堆栈
//1)定义WinMain函数
int WINAPI WinMain(HINSTANCE hInstance, //应用程序实例
	HINSTANCE hPrevInstance, //上一个应用程序实例,不用
	LPSTR lpCmdLine, //命令行参数
	int nCmdShow //窗口显示的样式, 最大化,最小化
){
    
    
	//2)设计窗口类WNDCLASS(给成员变量赋值)
	WNDCLASS wc;
	wc.cbClsExtra = 0; //类的附加信息
	wc.cbWndExtra = 0; //窗口附加信息
	wc.hbrBackground =  CreateSolidBrush(RGB(150, 222, 255)); //背景色
	wc.hCursor = LoadCursor(NULL, IDC_HAND); //加载系统默认光标
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); //加载系统默认图标
	wc.hInstance = hInstance; //传递给MyRegisterClass的hInstance参数值。主窗口需要知道正在使用的是哪个实例。
	wc.lpfnWndProc = DealMessage; //窗口过程函数名字,消息处理函数
	wc.lpszClassName = TEXT("windows"); //类的名字
	wc.lpszMenuName = NULL; //菜单名字
	wc.style = CS_HREDRAW | CS_VREDRAW;; //显示风格


	//3)注册窗口类, 告诉系统窗口过程函数的入口地址
	RegisterClass(&wc);

	//4)创建窗口类
	HWND hWnd = CreateWindow(TEXT("windows"), TEXT("Windows"), 
		WS_OVERLAPPEDWINDOW,//窗口风格
		400,300,600,400,//(x,y,width,height)位置及大小
		NULL, NULL, hInstance, NULL);//父窗口的句柄、主菜单的句柄、应用程序实例句柄

	//5)显示和更新窗口
	ShowWindow(hWnd, SW_SHOWNORMAL);
	UpdateWindow(hWnd);

	//6)消息循环
	MSG msg;
	//如果接受到WM_QUIT, 返回0, 退出; 如果出错,返回-1,不退出
	while (GetMessage(&msg, NULL, 0, 0))
	{
    
    
		//翻译
		TranslateMessage(&msg);
		//给操作系统分发消息
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

点击鼠标左键,效果如下

在这里插入图片描述

关闭窗口时,效果如下:

在这里插入图片描述
引用自:添加链接描述

猜你喜欢

转载自blog.csdn.net/lyjccchong/article/details/112688183