Windows API程序设计入门

Windows API 程序设计入门(创建第一个窗口)

目的

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

参考书目

《Windows程序设计》《深入浅出MFC》《VC++深入讲解》

利用Visual Studio 2015创建窗口

  1. 打开Visual Studio 2015
  2. “文件” —> “新建” —> “项目” —> “Win32项目”
    在下方输入项目名称"Winmainproject1";
    在这里插入图片描述在这里插入图片描述
  3. “头文件” —> “添加” —> “新建项” —> “C++文件”;
    在这里插入图片描述
    在这里插入图片描述
  4. 定义 WinMain 函数;
  5. 设计窗口类 WNDCLASS;
  6. 创建窗口;
  7. 显示及刷新窗口;
  8. 定义消息结构体,开始消息循环;
  9. 编写窗口过程函数;
#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinSunProc(
	HWND hwnd,      // 窗口句柄
	UINT uMsg,      // 消息标识符
	WPARAM wParam,  // 第一个消息参数
	LPARAM lParam   // 第二个消息参数
	);

int WINAPI WinMain(
	HINSTANCE hInstance,      // 当前实例句柄
	HINSTANCE hPrevInstance,  // 上一个实例句柄
	LPSTR lpCmdLine,          // 命令行
	int nCmdShow              // 显示状态
	)
{	//设计一个窗口类
	WNDCLASS wndcls;
	wndcls.cbClsExtra = 0;
	wndcls.cbWndExtra = 0;
	wndcls.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
	wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);
	wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);
	wndcls.hInstance = hInstance;
	wndcls.lpfnWndProc = WinSunProc;
	wndcls.lpszClassName = "yolo";
	wndcls.lpszMenuName = NULL;
	wndcls.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClass(&wndcls);

	//创建窗口
	HWND hwnd;
	hwnd = CreateWindow("yolo", "yolo", 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 WinSunProc(
	HWND hwnd,     
	UINT uMsg,      
	WPARAM wParam,  
	LPARAM lParam   
	)
{
	switch (uMsg)
	{
	case WM_CHAR:
		char szChar[20];
		sprintf(szChar, "char is %d", wParam);
		MessageBox(hwnd, szChar, "weixin", 0);
		break;
	case WM_LBUTTONDOWN:
		MessageBox(hwnd, "鼠标左键点击", "鼠标左键点击", 0);
		HDC hdc;
		hdc = GetDC(hwnd);
		TextOut(hdc, 0, 50, "you only live once", strlen("you only live once"));
		ReleaseDC(hwnd, hdc);
		break;
	case WM_PAINT:
		HDC hDC;
		PAINTSTRUCT ps;
		hDC = BeginPaint(hwnd, &ps);
		TextOut(hDC, 0, 0, "第一个win32", strlen("第一个win32"));
		EndPaint(hwnd, &ps);
		break;
	case WM_CLOSE:
		if (IDYES == MessageBox(hwnd, "确定要走了吗?", "", MB_YESNO))
		{
			DestroyWindow(hwnd);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}
	return 0;
}

效果如下

  1. 运行
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. 退出
    在这里插入图片描述

©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页