C++ WinMain创建一个空白窗体

#include 
#include 

//消息处理函数
LRESULT CALLBACK WndProc(HWND hWnd, UINT msgId, WPARAM wParam, LPARAM IParam)
{
	switch (msgId)
	{
		case WM_CLOSE:
		case WM_DESTROY:
		{
			//当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环
			PostQuitMessage(0);
		}
		break;
		default:
			//其他消息交给由系统提供的缺省处理函数
			return DefWindowProc(hWnd, msgId, wParam, IParam);
	}
	return 0;
}

///应用程序主函数
//CALLBACK等价于 __stdcall  标准调用
int CALLBACK WinMain(HINSTANCE hInstance,    //应用程序实例的句柄
	HINSTANCE hPrevInstance,  //前一个实例的句柄谁创建了或调用了exe
	LPSTR lpCmdLine,     //命令行参数
	int nShowCmd)   //窗口显示隐藏的命令
{
	
		//1 定制"窗口类"结构
		WNDCLASS      wndclass;

		memset(&wndclass, 0, sizeof(wndclass));

		//wndclass.cbSize  = sizeof(wndclass);
		wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;
		wndclass.lpfnWndProc = WndProc;//关联消息处理函数,告诉操作系统,如果有事件发生调用这个函数  
		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 = _T("lesson01");//窗口类的名称,操作系统根据类的名称做映射
		
		//2 将这个窗体注册(告诉)到操作系统
		RegisterClass(&wndclass);
		//3 创建窗口								
		HWND hWnd = CreateWindowEx(
			0          //窗口的扩展风格
			, _T("lesson01")   //窗口类的名称,必须和上面的lpszClassName一致
			,_T("lesson标题")    //窗口的标题
			,WS_OVERLAPPEDWINDOW    //窗口的风格
			,100     //屏幕位置
			,100
			,400       //宽高
			,320
			,0       //系统菜单
			,0      //父窗口
			,hInstance
			,0    //用户数据
		);
	
		//4 更新显示
		if (hWnd)
		{
			UpdateWindow(hWnd);
			ShowWindow(hWnd,SW_SHOW);
		}


		MSG msg = { 0 };

		//消息循环
		while (WM_QUIT != msg.message)
		{
			//如果没有消息,这里会阻塞
			//返回值为false,就是点了关闭按钮
			//第一个参数用来接收message结构的,第二个参数是 窗口
			//第三个和第四个是要过滤消息的范围,都为0 就是接收所有的消息,不为0就是接收范围内的消息
			if (GetMessage(&msg, 0, 0, 0))
			{
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}
		return 0;
}

 

你可能感兴趣的:(C++)