#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hThis, HINSTANCE hPrev, LPSTR szCmdLine, int iCmdShow)
{ //告诉编译器不使用某些参数,方便编译器进行一些额外的优化
UNREFERENCED_PARAMETER(hPrev);
UNREFERENCED_PARAMETER(szCmdLine);
//实例化窗口结构
WNDCLASSEX wndEx = { 0 };
wndEx.cbClsExtra = 0;
wndEx.cbSize = sizeof(wndEx);
wndEx.cbWndExtra = 0;
wndEx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wndEx.hCursor = LoadCursor(NULL, IDC_ARROW);
wndEx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndEx.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wndEx.hInstance = hThis;//窗口过程的实例句柄
wndEx.lpfnWndProc = WndProc;//指向窗口过程的指针
wndEx.lpszClassName = TEXT("GUIProject");
wndEx.lpszMenuName = NULL;
wndEx.style = CS_HREDRAW | CS_VREDRAW;
//注册窗口类
if (!RegisterClassEx(&wndEx))
{
return -1;
}
//创建窗口
HWND hWnd = CreateWindow(wndEx.lpszClassName, TEXT("GUI Project"), WS_OVERLAPPEDWINDOW, 200, 200, 400, 300, HWND_DESKTOP, NULL, hThis, 0);
if (!hWnd)
{
return -1;
}
//更新窗口 向窗口发送一条WM_PAINT消息
UpdateWindow(hWnd);
//设置指定窗口显示状态
ShowWindow(hWnd, iCmdShow);
MSG msg = { 0 };
//从主调线程的消息队列中检索信息
while (GetMessage(&msg, NULL, NULL, NULL))
{
// Translates virtual-key messages into character messages.
TranslateMessage(&msg);//把虚拟消息翻译成字符消息
// Dispatches a message to a window procedure.
DispatchMessage(&msg);//分发一条消息给窗口过程
}
DestroyWindow(hWnd);
//注销窗口类释放该类占用的内存
UnregisterClass(wndEx.lpszClassName, hThis);
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
{
PostQuitMessage(0);
break;
}
default:
{
//调用默认窗口过程函数,处理应用程序未处理的消息,从而确保每个消息都被处理
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}
return 0;
}