在学习过程中始终该留下些什么,所以我整理了一下代码,并发布到博客中,希望以后能回过头看看,在路上,有过怎样的风景。。。
//2016年11月8日15:06:37
//cretae by arrstd
//一个创建窗口的模板代码
#include <Windows.h>
#define WndClassName L"ThisIsAWindowClass"
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//设计窗口类
WNDCLASSEX WndClass;
WndClass.cbSize = sizeof(WNDCLASSEX);
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = WndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL, IDI_QUESTION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = WndClassName;
WndClass.hIconSm = NULL;
//对窗口类进行注册
if (!RegisterClassEx(&WndClass)) { MessageBox(NULL, L"窗口类注册失败", L"提示信息", MB_OK); }
//正式创建窗口
HWND hwnd = CreateWindow(WndClassName, L"Tittle", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInstance, NULL);
if (!hwnd) { MessageBox(NULL, L"窗口创建失败", L"提示信息", MB_OK); }
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
MSG msg = { 0 };
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))// 这里注意peekmessage函数的第二个参数,设置为null表明接受所有消息
{ // 如果设置前面创建的hwnd,则接收不到全局消息wm_quit
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//窗口类的注销
UnregisterClass(WndClassName, WndClass.hInstance);
}
LRESULT WINAPI WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_KEYDOWN:
if (wParam == VK_ESCAPE) DestroyWindow(hwnd);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}