windows程序设计 创建一个新的窗口

#include <windows.h>

LRESULT CALLBACK myProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){

	static TCHAR szClassName[] = TEXT("cabbage");

	MSG msg;//消息结构
	HWND hwnd;//窗口句柄
	WNDCLASS wc;//窗口类别结构

	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//窗口背景颜色
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);//光标
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);//小图标
	wc.hInstance = hInstance;//实例句柄
	wc.lpfnWndProc = myProc;//回调函数
	wc.lpszClassName = szClassName;//类名
	wc.lpszMenuName = NULL;//菜单
	wc.style = CS_VREDRAW | CS_HREDRAW;

	//注册窗口 为程序窗口注册窗口类别
	if(!RegisterClass(&wc)){
		MessageBox(NULL, TEXT("注册窗口失败"), szClassName, MB_ICONERROR);
		return 0;
	}

	//创建窗口 根据窗口类别建立一个窗口
	hwnd = CreateWindow(szClassName,//窗口类名
		TEXT("hello insert"),//窗口标题
		WS_OVERLAPPEDWINDOW,//窗口显示样式
		CW_USEDEFAULT, CW_USEDEFAULT,//窗口在显示器上显示离左上角的距离,横轴为x,纵轴为y
		CW_USEDEFAULT, CW_USEDEFAULT,//宽口宽度和高度
		NULL, NULL, hInstance, NULL);//

	//显示窗口 在屏幕上显示窗口
	ShowWindow(hwnd, nCmdShow);
	//刷新窗口 只是窗口自我更新
	UpdateWindow(hwnd);

	//消息循环
	while(GetMessage(&msg, NULL, 0, 0)){//获取消息 从消息队列中取得消息
		TranslateMessage(&msg);//翻译消息 转译某些键盘消息
		DispatchMessage(&msg);//分发消息 将消息发送给窗口消息处理程序
	}

	return 0;
}

LRESULT CALLBACK myProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){

	PAINTSTRUCT ps;//绘图结构
	HDC hdc;//设备内容句柄
	RECT rect;//矩形结构

	switch(msg){
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);//开始绘制窗口

		GetClientRect(hwnd, &rect);
		DrawText(hdc, TEXT("你好,爱白菜的小昆虫!"), -1, &rect,
			DT_SINGLELINE | DT_CENTER | DT_VCENTER);
		
		EndPaint(hwnd, &ps);//结束绘制窗口
		break;
	case WM_DESTROY://销毁窗口消息
		PostQuitMessage(0);//抛出退出程序消息
		break;
	}

	//返回执行内定的消息处理
	return DefWindowProc(hwnd, msg, wParam, lParam);
}

  

运行结果

原文地址:https://www.cnblogs.com/xuqiulin/p/9997019.html