C++第一个窗口程序

#include <stdio.h>
#include <windows.h>

// 类名
LPCTSTR clsName = "MyFirstWinApp";
// 窗口上的标题
LPCTSTR msgName = "msgName";

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

// 目的:窗口程序
int WINAPI WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR     lpCmdLine,
	int       nShowCmd
)
{
	//  UINT        style;
	//  WNDPROC     lpfnWndProc;
	//  int         cbClsExtra;
	//  int         cbWndExtra;
	//  HINSTANCE   hInstance;
	//  HICON       hIcon;
	//  HCURSOR     hCursor;
	//  HBRUSH      hbrBackground;
	//  LPCWSTR     lpszMenuName;
	//  LPCWSTR     lpszClassName;
	// 定义和配置对象
	WNDCLASS wndcls;
	wndcls.cbClsExtra = NULL;
	wndcls.cbWndExtra = NULL;
	wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wndcls.hInstance = hInstance;

	// 定义交互响应,回调
	wndcls.lpfnWndProc = MyWinProc;

	// 定义窗口代号
	wndcls.lpszClassName = clsName;
	wndcls.lpszMenuName = NULL;
	wndcls.style = CS_HREDRAW | CS_VREDRAW;

	// 注册窗口类
	RegisterClass(&wndcls);

	// 创建窗口
	HWND hwnd;
	hwnd = CreateWindow(clsName, msgName, WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, hInstance, NULL);

	// 显示和刷新窗口
	ShowWindow(hwnd, SW_SHOWNORMAL);
	UpdateWindow(hwnd);

	// 消息循环
	MSG msg;
	while (GetMessage(&msg, NULL, NULL, NULL))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

LRESULT CALLBACK MyWinProc(
	HWND hwnd,
	UINT uMsg,
	WPARAM wParam,
	LPARAM lParam
)
{
	// uMsg消息类型
	int ret;
	HDC hdc;
	switch (uMsg)
	{
		// 用户按下键盘事件
	case WM_CHAR:
		char szChar[20];
		sprintf_s(szChar, "您刚刚按下了:%c", wParam);
		MessageBox(hwnd, szChar, "char", NULL);
		break;
		// 用户鼠标左键按下事件
	case WM_LBUTTONDOWN:
		MessageBox(hwnd, "检测到鼠标左键按下了", "msg", NULL);
		break;
		// 窗口重绘事件
	case WM_PAINT:
		PAINTSTRUCT ps;
		hdc = BeginPaint(hwnd, &ps);
		TextOut(hdc, 0, 0, "www.baidu.com", strlen("www.baidu.com"));
		EndPaint(hwnd, &ps);
		MessageBox(hwnd, "重绘", "msg", NULL);
		break;
		// 窗口关闭事件
	case WM_CLOSE:
		ret = MessageBox(hwnd, "是否关闭程序?", "msg", MB_YESNO);
		if (ret == IDYES)
		{
			DestroyWindow(hwnd);
		}
		break;
		// 窗口销毁事件
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
		// 其他事件如下处理
	default:
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42789698/article/details/140477025