C++ windows窗体的创建过程

关于windows窗体的创建过程,记录一下,加深印象!

#include<Windows.h>
#include<stdio.h>


LRESULT CALLBACK WindowSunProc(
	HWND hwnd,     //handle to window

	UINT uMsg,     //message identifier

	WPARAM wParam, //first message parameter

	LPARAM lParam //second message parameter
	);
int WINAPI WinMain(
	HINSTANCE hInstance, //handle to current instance

	HINSTANCE hPrevInstance,//handle to previous instance

	LPSTR lpCmdLine,        //command line

	int nCmdShow            //show state
	)
{
	//初始化,初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分
	HWND hwnd;
	MSG Msg;
	WNDCLASS wndclass;
	char lpszClassName[] = "窗口"; //窗口类名
	char lpszTitle[] = "测试窗口";  //窗口标题名
	//窗口类定义,窗口类定义了窗口的形式与功能,窗口类定义通过给窗口类数据结构WNDCLASS赋值完成
	//该数据结构中包含窗口类的各种属性
	wndclass.style = 0; // 窗口类型为缺省类型CS_     Class Style
	wndclass.lpfnWndProc = WindowSunProc; //定义窗口处理函数
	wndclass.cbClsExtra = 0; //窗口类无扩展
	wndclass.cbWndExtra = 0; //窗口实例无扩展
	wndclass.hInstance = hInstance; //当前实例句柄
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); //窗口的最小化图标为缺省图标
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); // 窗口采用箭头光标
	wndclass.hbrBackground = (HBRUSH)(GetStockObject(WHITE_BRUSH)); //窗口背景为白色
	wndclass.lpszMenuName = NULL; //窗口无菜单
	wndclass.lpszClassName = (LPCWCHAR)lpszClassName; //窗口类名为“窗口”
	//以下是窗口类的注册-----------Windows系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。

	if (!RegisterClass(&wndclass))
	{
		MessageBeep(0);
		return -1;
	}
	char *windowClassName = "窗口类名";
	char *windowsApplicationName = "窗口标题";
	hwnd = CreateWindow((LPCWSTR)windowClassName,
		(LPCWSTR)windowsApplicationName,
		WS_OVERLAPPEDWINDOW,
		100,
		50,
		400,
		250,
		NULL,
		NULL,
		hInstance,
		NULL
		);
	ShowWindow(hwnd, SW_SHOWNORMAL);

	UpdateWindow(hwnd);

	while (GetMessage(&Msg,NULL,0,0))
	{
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);

	}
	return Msg.wParam;

}
LRESULT CALLBACK WindowSunProc(
	HWND hwnd,     //handle to window

	UINT uMsg,     //message identifier

	WPARAM wParam, //first message parameter

	LPARAM lParam //second message parameter
	)
{
	switch (uMsg)

	{

	case WM_CHAR:           //在窗口中按下一个字符键,将弹出相应的信息

		char szChar[20];

		sprintf_s(szChar, "char code is %d", wParam);//将字符消息放入szChar中

		MessageBox(hwnd, (LPCWSTR)szChar, (LPCWSTR)"char", 0);

		break;

	case WM_LBUTTONDOWN:    //在窗口中按下鼠标左键时,弹出提示信息并输出文字

		MessageBox(hwnd, (LPCWSTR)"mouse clicked", (LPCWSTR)"message", 0);

		HDC hdc;

		hdc = GetDC(hwnd);//不能在响应WM_PAINT消息时调用

		TextOut(hdc, 0, 50, (LPCWSTR)"快乐生活", strlen("快乐生活"));

		ReleaseDC(hwnd, hdc);

		break;

	case WM_PAINT:         //重新绘制窗口

		HDC hDC;

		PAINTSTRUCT ps;

		hDC = BeginPaint(hwnd, &ps);//BeginPaint只能在响应WM_PAINT消息时调用

		TextOut(hDC, 0, 0, (LPCWSTR)"只要努力就会看到阳光", strlen("只要努力就会看到阳光"));

		EndPaint(hwnd, &ps);

		break;

	case WM_CLOSE:          //关闭窗口时弹出消息框

		if (IDYES == MessageBox(hwnd, (LPCWSTR)"是否真的结束?", (LPCWSTR)"message", MB_YESNO))

		{

			DestroyWindow(hwnd);

		}

		break;

	case WM_DESTROY:

		PostQuitMessage(0);

		break;

	default:

		return DefWindowProc(hwnd, uMsg, wParam, lParam);

	}

	return 0;
}


猜你喜欢

转载自blog.csdn.net/lwg742216502/article/details/40023809