WIN32窗口创建

WIN32窗口创建过程:

1、定义窗口类(在MSDN中找到函数原型:WinMain())

2、定义窗口处理函数(在MSDN中找到原型:WindowProc)

3、设计窗口类

4、注册窗口类(RegisterClass/RegisterClassEx)

5、创建窗口(CreateWindow/CreateWindowEx)

6、显示和更新窗口(ShowWindow、UpdateWindow)

7、消息循环

示例代码(自己手敲的):

//窗口创建过程:
//1.定义WinMain函数
//2.定义窗口处理函数
//3.设计窗口类
//4.注册窗口
//5.显示和更新窗口
//6.消息循环
#include <Windows.h>

HINSTANCE g_Instance;

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

void CreateWin()
{
	//设计窗口类
	WNDCLASSEX wc = { 0 };
	wc.cbClsExtra = 0;
	wc.cbSize = sizeof(wc);
	wc.cbWndExtra = 0;
	wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
	wc.hCursor = NULL;
	wc.hIcon = NULL;
	wc.hIconSm = NULL;
	wc.hInstance = g_Instance;
	wc.lpfnWndProc = MyWinProc;
	wc.lpszClassName = __TEXT("MyWin");
	wc.lpszMenuName = NULL;
	wc.style = CS_HREDRAW | CS_VREDRAW;
	//注册窗口类
	ATOM at = RegisterClassEx(&wc);
	if (0 == at)
		return;
	//创建窗口
	HWND  hWnd = CreateWindowEx(0, __TEXT("MyWin"), __TEXT("哈喽"), WS_OVERLAPPEDWINDOW, 20, 20, 200, 300, NULL, NULL, g_Instance, NULL);
	if (NULL == hWnd)
		return;
	//显示窗口
	if (ShowWindow(hWnd, SW_SHOW))
		return;
	UpdateWindow(hWnd);
	//消息循环
	MSG ms = { 0 };
	while (GetMessage(&ms, NULL, 0, 0))
	{
		TranslateMessage(&ms);
		DispatchMessage(&ms);
	}
}

//利用系统窗口类创建一个button
void MySysWin()
{
	//系统窗口类不需要设计、注册,直接创建
	HWND hWnd = CreateWindowEx(0, __TEXT("button"), __TEXT("哈喽"), WS_OVERLAPPEDWINDOW, 30, 40, 300, 400, NULL, NULL, g_Instance, 0);
	if (NULL == hWnd)
		return;
	if (ShowWindow(hWnd, SW_SHOW))
		return;
	UpdateWindow(hWnd);
	MSG ms = { 0 };
	while (GetMessage(&ms, NULL, 0, 0))
	{
		TranslateMessage(&ms);
		DispatchMessage(&ms);
	}
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	LPSTR lpCmdLine, int nCmdShow)
{
	g_Instance = hInstance;
	//CreateWin();
	MySysWin();
	return 0;
}


猜你喜欢

转载自blog.csdn.net/bimabushihaodongxi/article/details/70230817
今日推荐