您好,欢迎访问代码之道!登录后台查看权限
  • 欢迎大神光临
  • 有朋自远方来 不亦悦乎

windows程序设计上机练习2:创建窗口、消息循环

C/C++ dz2015 2017-11-16 961 次浏览 0个评论

练习二 窗口一个窗口

练习代码 主.cpp

#include <Windows.h>
#include <tchar.h>

#define LOG_D(fmt, ...) {\
	TCHAR msgbuf[1024];\
	_stprintf_s(msgbuf, fmt, __VA_ARGS__);\
	OutputDebugString(msgbuf); \
	OutputDebugString(_T("\n"));\
}

WNDCLASSEXW wcex;
HWND  hwnd;

LRESULT CALLBACK MainWinPro(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	LOG_D(_T("[MainWinPro]message=0x%x"), uMsg);
	switch (uMsg) {
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		return DefWindowProc(hwnd, uMsg, wParam, lParam);
	}
	return LRESULT();
}

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPTSTR	lpCmdLine,
	_In_ int	nCmdShow) {
	wcex.cbSize = sizeof(WNDCLASSEX);
	wcex.style = CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc = MainWinPro;
	wcex.cbClsExtra = 0; //不使用类内存
	wcex.cbWndExtra = 0; //不使用窗口内存
	wcex.hInstance = hInstance;
	wcex.hIcon = LoadIcon(nullptr, IDI_APPLICATION);;
	wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
	wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 2); //窗口背景:COLOR_WINDOW+n
	wcex.lpszMenuName = 0;
	wcex.lpszClassName = _T("MainWindow");
	wcex.hIconSm = 0;
	RegisterClassEx(&wcex);
	hwnd = CreateWindow(           //创建窗口
		_T("MainWindow"),		   //窗口类名
		_T("记事本"),              //窗口标题
		WS_OVERLAPPEDWINDOW,       //窗口的风格
		CW_USEDEFAULT,             //窗口初始显示位置x:使用缺省值
		CW_USEDEFAULT,             //窗口初始显示位置y:使用缺省值
		CW_USEDEFAULT,             //窗口的宽度:使用缺省值
		CW_USEDEFAULT,             //窗口的高度:使用缺省值
		nullptr,                   //父窗口:无
		nullptr,                   //子菜单:无
		hInstance,		           //该窗口应用程序的实例句柄 
		nullptr                    //创建窗口的参数
	);
	ShowWindow(hwnd, nCmdShow);    //显示窗口
	UpdateWindow(hwnd);            //更新窗口
	MSG msg;
	// 主消息循环: 
	while (GetMessage(&msg, nullptr, 0, 0)) { //获取消息
		TranslateMessage(&msg); //翻译消息
		DispatchMessage(&msg);  //分发消息
	}
	return (int)msg.wParam;
}


已有 961 位网友参与,快来吐槽:

发表评论