I seem to always need this skeleton code to build a window but I can never seem to memorize the whole thing.
I figured I would post it here to make it easier for me to find. The #programa comments are not cross platform
and only work on Microsoft based compilers, so watch out.
/**
* SimpleWindow v1.0
* @file
*
* 09-24-2008: JPH - Created.
*
* @author Jacob Hammack
*/
#include <windows.h>
/**
* Forces the compiler to link these libraries
*
*/
#pragma comment(lib, "user32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "kernel32.lib")
/**
* WindowsMessageLoop processes
*
* @author Jacob Hammack
*/
LRESULT CALLBACK WindowsMessageLoop ( HWND WindowHandle , UINT Message , WPARAM WindowParameters , LPARAM MoreWindowsParameters )
{
switch ( Message )
{
case WM_CREATE :
return 0 ;
case WM_PAINT :
return 0 ;
case WM_SIZE :
return 0 ;
case WM_DESTROY :
PostQuitMessage ( 0 );
return 0 ;
}
return DefWindowProc ( WindowHandle , Message , WindowParameters , MoreWindowsParameters );
}
/**
* WinMain is the main() equivilent for a windows program, execution starts here.
*
* @author Jacob Hammack
*/
int WINAPI WinMain ( HINSTANCE CurrentInstance , HINSTANCE PreviousInstance , PSTR CommandLine , int CommandShow )
{
static TCHAR ApplicationName [] = TEXT ( "SimpleWindow" );
HWND WindowHandle ;
MSG Message ;
WNDCLASS WindowsClass ;
WindowsClass . style = CS_HREDRAW | CS_VREDRAW ;
WindowsClass . lpfnWndProc = WindowsMessageLoop ;
WindowsClass . cbClsExtra = 0 ;
WindowsClass . cbWndExtra = 0 ;
WindowsClass . hInstance = CurrentInstance ;
WindowsClass . hIcon = LoadIcon ( NULL , IDI_APPLICATION );
WindowsClass . hCursor = LoadCursor ( NULL , IDC_ARROW );
WindowsClass . hbrBackground = ( HBRUSH ) GetStockObject ( WHITE_BRUSH );
WindowsClass . lpszMenuName = NULL ;
WindowsClass . lpszClassName = ApplicationName ;
if ( ! RegisterClass ( & WindowsClass ))
{
MessageBox ( NULL , TEXT ( "Unable to create a window." ), ApplicationName , MB_ICONERROR );
return 0 ;
}
WindowHandle = CreateWindow ( ApplicationName , /* Window Class Name*/
TEXT ( "Simple Window" ), /* Window Caption */
WS_OVERLAPPEDWINDOW , /* Window Style*/
CW_USEDEFAULT , /* Initial X position*/
CW_USEDEFAULT , /* Initial Y position */
300 , /* Initial Width of the window*/
100 , /* Initial Height of the window */
NULL , /* Parent Window Handle */
NULL , /* Window Menu Handle */
CurrentInstance , /* Instance of the Program Handle*/
NULL ); /* Window Creation Parameters */
ShowWindow ( WindowHandle , CommandShow );
UpdateWindow ( WindowHandle );
while ( GetMessage ( & Message , NULL , 0 , 0 ))
{
TranslateMessage ( & Message );
DispatchMessage ( & Message );
}
return Message . wParam ;
}
CC = cl
CFLAGS = /nologo /MT /O2 /TC
LINKS = /link /OUT:simplewindow.exe /SUBSYSTEM:WINDOWS
all : simplewindow
simplewindow : simplewindow .c
$( CC) $( CFLAGS) simplewindow.c $( LINKS)
clean :
del *.exe; del *.obj