main.cpp
#define WIN32_LEAN_AND_MEAN
#define UNICODE
#include <windows.h>
LRESULT CALLBACK WindowProc(HWND Window, UINT Message, WPARAM WParam, LPARAM LParam) {
switch(Message) {
case WM_KEYDOWN: {
switch(WParam) { case 'O': { DestroyWindow(Window); }; }
} break;
case WM_DESTROY: { PostQuitMessage(0); } break;
default: { return DefWindowProc(Window, Message, WParam, LParam); }
}
return 0;
}
int WINAPI wWinMain(HINSTANCE Instance, HINSTANCE PrevInstance, PWSTR CmdLine, int CmdShow) {
WNDCLASS WindowClass = {};
const wchar_t ClassName[] = L"MyWindowClass";
WindowClass.lpfnWndProc = WindowProc;
WindowClass.hInstance = Instance;
WindowClass.lpszClassName = ClassName;
WindowClass.hCursor = LoadCursor(0, IDC_CROSS);
if(!RegisterClass(&WindowClass)) {
MessageBox(0, L"RegisterClass failed", 0, 0);
return GetLastError();
}
HWND Window = CreateWindowEx(0, ClassName, L"Program",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
0, 0, Instance, 0);
if(!Window) {
MessageBox(0, L"CreateWindowEx failed", 0, 0);
return GetLastError();
}
bool Running = true;
while(Running) {
MSG Message;
while(PeekMessage(&Message, nullptr, 0, 0, PM_REMOVE)) {
if(Message.message == WM_QUIT) Running = false;
TranslateMessage(&Message);
DispatchMessage(&Message);
}
}
return 0;
}
Build
cl main.cpp /link user32.lib
You can access Microsoft build tools like this:
- Install Visual Studio and select C++ workload.
- Launch Developer Command Prompt.
build.bat
You might want to use a script for more complex build instructions:
@echo off
set COMMON_COMPILER_FLAGS=/W4 /wd4100 /Oi /nologo /Fegame.exe
set DEBUG_FLAGS=/Zi /MTd
set RELEASE_FLAGS=/O2
set COMPILER_FLAGS=%COMMON_COMPILER_FLAGS% %DEBUG_FLAGS%
REM set COMPILER_FLAGS=%COMMON_COMPILER_FLAGS% %RELEASE_FLAGS%
set LINKER_FLAGS=/INCREMENTAL:NO /OPT:REF
set LIBS=user32.lib
cl %COMPILER_FLAGS% main.cpp /link %LINKER_FLAGS% %LIBS%