[Windows开发] 用C++创建第一个窗口程序

Win32 API(也称为Windows API)是Windows比较原生态的C++ API。

使用的编辑器是Visio Studio 2019。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
创建项目完毕,在源文件文件夹下创建main.cpp文件:
在这里插入图片描述

#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
	// Register the window class
	const wchar_t CLASS_NAME[] = L"Sample Window Class";

	WNDCLASS wc = {};

	wc.lpfnWndProc = WindowProc;
	wc.hInstance = hInstance;
	wc.lpszClassName = CLASS_NAME;

	RegisterClass(&wc);

	// Create the window
	HWND hwnd = CreateWindowEx(
		0, // Optional window styles.
		CLASS_NAME, // Window class
		L"Learn to Program Windows", // Window text
		WS_OVERLAPPEDWINDOW, // Window style

		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, // Size and position

		NULL, // Parent window
		NULL, // Menu
		hInstance, // Instance handle
		NULL // Additional application data
	);

	if (hwnd == NULL) {
		return 0;
	}

	ShowWindow(hwnd, nCmdShow);

	// Run the message loop
	MSG msg = {};
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return 0;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;

	case WM_PAINT: {
		PAINTSTRUCT ps;
		HDC hdc = BeginPaint(hwnd, &ps);

		FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));

		EndPaint(hwnd, &ps);
	}
				 return 0;
	}
	return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

【F7】生成解决方案
【Ctrl+F5】开始执行

运行结果如下:
在这里插入图片描述

知识点

第一个窗口程序,就包含了比较多的C++知识。

LRESULT:实际类型是长整型long
HWND:Handle of Window,窗口的句柄

在字符串前加一个L表示将ANSI字符串转换成Unicode的字符串,即每个字符占用两个字节。

CALLBACK和WINAPI,实际都是__stdcall,也就是函数调用方式,通常有__stdcall和__cdecl两种方式。

©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页