<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>main.html</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="generator" content="SynEdit HTML exporter" /> <style type="text/css"> <!-- body { color: #000000; background-color: #FFFFFF; } ..cpp1-assembler { color: #0000FF; } ..cpp1-character { color: #000000; } ..cpp1-comment { color: #3399FF; font-style: italic; } ..cpp1-float { color: #800080; } ..cpp1-hexadecimal { color: #800080; } ..cpp1-identifier { color: #000000; } ..cpp1-illegalchar { color: #000000; } ..cpp1-number { color: #800080; } ..cpp1-octal { color: #800080; } ..cpp1-preprocessor { color: #008000; } ..cpp1-reservedword { color: #000000; font-weight: bold; } ..cpp1-space { background-color: #FFFFFF; color: #000000; } ..cpp1-string { color: #0000FF; font-weight: bold; } ..cpp1-symbol { color: #FF0000; font-weight: bold; } --> </style> </head> <body> <pre> <code><span style="font: 10pt Consolas;"><span class="cpp1-preprocessor">#include <windows.h> </span><span class="cpp1-comment">/* This is where all the input to the window goes to */ </span><span class="cpp1-identifier">LRESULT CALLBACK WndProc</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">HWND hwnd</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> UINT Message</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> WPARAM wParam</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> LPARAM lParam</span><span class="cpp1-symbol">)</span><span class="cpp1-space"> </span><span class="cpp1-symbol">{ </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">switch</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">Message</span><span class="cpp1-symbol">)</span><span class="cpp1-space"> </span><span class="cpp1-symbol">{ </span><span class="cpp1-space"> </span><span class="cpp1-comment">/* Upon destruction, tell the main thread to stop */ </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">case</span><span class="cpp1-space"> WM_DESTROY</span><span class="cpp1-symbol">:</span><span class="cpp1-space"> </span><span class="cpp1-symbol">{ </span><span class="cpp1-space"> PostQuitMessage</span><span class="cpp1-symbol">(</span><span class="cpp1-number">0</span><span class="cpp1-symbol">); </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">break</span><span class="cpp1-symbol">; </span><span class="cpp1-space"> </span><span class="cpp1-symbol">} </span><span class="cpp1-space"> </span><span class="cpp1-comment">/* All other messages (a lot of them) are processed using default procedures */ </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">default</span><span class="cpp1-symbol">: </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">return</span><span class="cpp1-space"> DefWindowProc</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">hwnd</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> Message</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> wParam</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> lParam</span><span class="cpp1-symbol">); </span><span class="cpp1-space"> </span><span class="cpp1-symbol">} </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">return</span><span class="cpp1-space"> </span><span class="cpp1-number">0</span><span class="cpp1-symbol">; } </span><span class="cpp1-comment">/* The 'main' function of Win32 GUI programs: this is where execution starts */ </span><span class="cpp1-reservedword">int</span><span class="cpp1-space"> WINAPI WinMain</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">HINSTANCE hInstance</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> HINSTANCE hPrevInstance</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> LPSTR lpCmdLine</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> </span><span class="cpp1-reservedword">int</span><span class="cpp1-space"> nCmdShow</span><span class="cpp1-symbol">)</span><span class="cpp1-space"> </span><span class="cpp1-symbol">{ </span><span class="cpp1-space"> WNDCLASSEX wc</span><span class="cpp1-symbol">;</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* A properties struct of our window */ </span><span class="cpp1-space"> HWND hwnd</span><span class="cpp1-symbol">;</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* A 'HANDLE', hence the H, or a pointer to our window */ </span><span class="cpp1-space"> MSG msg</span><span class="cpp1-symbol">;</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* A temporary location for all messages */ </span><span class="cpp1-space"> </span><span class="cpp1-comment">/* zero out the struct and set the stuff we want to modify */ </span><span class="cpp1-space"> memset</span><span class="cpp1-symbol">(&</span><span class="cpp1-identifier">wc</span><span class="cpp1-symbol">,</span><span class="cpp1-number">0</span><span class="cpp1-symbol">,</span><span class="cpp1-reservedword">sizeof</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">wc</span><span class="cpp1-symbol">)); </span><span class="cpp1-space"> wc</span><span class="cpp1-symbol">.</span><span class="cpp1-identifier">cbSize </span><span class="cpp1-symbol">=</span><span class="cpp1-space"> </span><span class="cpp1-reservedword">sizeof</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">WNDCLASSEX</span><span class="cpp1-symbol">); </span><span class="cpp1-space"> wc</span><span class="cpp1-symbol">.</span><span class="cpp1-identifier">lpfnWndProc </span><span class="cpp1-symbol">=</span><span class="cpp1-space"> WndProc</span><span class="cpp1-symbol">;</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* This is where we will send messages to */ </span><span class="cpp1-space"> wc</span><span class="cpp1-symbol">.</span><span class="cpp1-identifier">hInstance </span><span class="cpp1-symbol">=</span><span class="cpp1-space"> hInstance</span><span class="cpp1-symbol">; </span><span class="cpp1-space"> wc</span><span class="cpp1-symbol">.</span><span class="cpp1-identifier">hCursor </span><span class="cpp1-symbol">=</span><span class="cpp1-space"> LoadCursor</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">NULL</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> IDC_ARROW</span><span class="cpp1-symbol">); </span><span class="cpp1-space"> </span><span class="cpp1-comment">/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */ </span><span class="cpp1-space"> wc</span><span class="cpp1-symbol">.</span><span class="cpp1-identifier">hbrBackground </span><span class="cpp1-symbol">=</span><span class="cpp1-space"> </span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">HBRUSH</span><span class="cpp1-symbol">)(</span><span class="cpp1-identifier">COLOR_WINDOW</span><span class="cpp1-symbol">+</span><span class="cpp1-number">1</span><span class="cpp1-symbol">); </span><span class="cpp1-space"> wc</span><span class="cpp1-symbol">.</span><span class="cpp1-identifier">lpszClassName </span><span class="cpp1-symbol">=</span><span class="cpp1-space"> </span><span class="cpp1-string">"WindowClass"</span><span class="cpp1-symbol">; </span><span class="cpp1-space"> wc</span><span class="cpp1-symbol">.</span><span class="cpp1-identifier">hIcon </span><span class="cpp1-symbol">=</span><span class="cpp1-space"> LoadIcon</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">NULL</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> IDI_APPLICATION</span><span class="cpp1-symbol">);</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* Load a standard icon */ </span><span class="cpp1-space"> wc</span><span class="cpp1-symbol">.</span><span class="cpp1-identifier">hIconSm </span><span class="cpp1-symbol">=</span><span class="cpp1-space"> LoadIcon</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">NULL</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> IDI_APPLICATION</span><span class="cpp1-symbol">);</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* use the name "A" to use the project icon */ </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">if</span><span class="cpp1-symbol">(!</span><span class="cpp1-identifier">RegisterClassEx</span><span class="cpp1-symbol">(&</span><span class="cpp1-identifier">wc</span><span class="cpp1-symbol">))</span><span class="cpp1-space"> </span><span class="cpp1-symbol">{ </span><span class="cpp1-space"> MessageBox</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">NULL</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> </span><span class="cpp1-string">"Window Registration Failed!"</span><span class="cpp1-symbol">,</span><span class="cpp1-string">"Error!"</span><span class="cpp1-symbol">,</span><span class="cpp1-identifier">MB_ICONEXCLAMATION</span><span class="cpp1-symbol">|</span><span class="cpp1-identifier">MB_OK</span><span class="cpp1-symbol">); </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">return</span><span class="cpp1-space"> </span><span class="cpp1-number">0</span><span class="cpp1-symbol">; </span><span class="cpp1-space"> </span><span class="cpp1-symbol">} </span><span class="cpp1-space"> hwnd </span><span class="cpp1-symbol">=</span><span class="cpp1-space"> CreateWindowEx</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">WS_EX_CLIENTEDGE</span><span class="cpp1-symbol">,</span><span class="cpp1-string">"WindowClass"</span><span class="cpp1-symbol">,</span><span class="cpp1-string">"Caption"</span><span class="cpp1-symbol">,</span><span class="cpp1-identifier">WS_VISIBLE</span><span class="cpp1-symbol">|</span><span class="cpp1-identifier">WS_OVERLAPPEDWINDOW</span><span class="cpp1-symbol">, </span><span class="cpp1-space"> CW_USEDEFAULT</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* x */ </span><span class="cpp1-space"> CW_USEDEFAULT</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* y */ </span><span class="cpp1-space"> </span><span class="cpp1-number">640</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* width */ </span><span class="cpp1-space"> </span><span class="cpp1-number">480</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* height */ </span><span class="cpp1-space"> NULL</span><span class="cpp1-symbol">,</span><span class="cpp1-identifier">NULL</span><span class="cpp1-symbol">,</span><span class="cpp1-identifier">hInstance</span><span class="cpp1-symbol">,</span><span class="cpp1-identifier">NULL</span><span class="cpp1-symbol">); </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">if</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">hwnd </span><span class="cpp1-symbol">==</span><span class="cpp1-space"> NULL</span><span class="cpp1-symbol">)</span><span class="cpp1-space"> </span><span class="cpp1-symbol">{ </span><span class="cpp1-space"> MessageBox</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">NULL</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> </span><span class="cpp1-string">"Window Creation Failed!"</span><span class="cpp1-symbol">,</span><span class="cpp1-string">"Error!"</span><span class="cpp1-symbol">,</span><span class="cpp1-identifier">MB_ICONEXCLAMATION</span><span class="cpp1-symbol">|</span><span class="cpp1-identifier">MB_OK</span><span class="cpp1-symbol">); </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">return</span><span class="cpp1-space"> </span><span class="cpp1-number">0</span><span class="cpp1-symbol">; </span><span class="cpp1-space"> </span><span class="cpp1-symbol">} </span><span class="cpp1-space"> </span><span class="cpp1-comment">/* This is the heart of our program where all input is processed and sent to WndProc. Note that GetMessage blocks code flow until it receives something, so this loop will not produce unreasonably high CPU usage */ </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">while</span><span class="cpp1-symbol">(</span><span class="cpp1-identifier">GetMessage</span><span class="cpp1-symbol">(&</span><span class="cpp1-identifier">msg</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> NULL</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> </span><span class="cpp1-number">0</span><span class="cpp1-symbol">,</span><span class="cpp1-space"> </span><span class="cpp1-number">0</span><span class="cpp1-symbol">)</span><span class="cpp1-space"> </span><span class="cpp1-symbol">></span><span class="cpp1-space"> </span><span class="cpp1-number">0</span><span class="cpp1-symbol">)</span><span class="cpp1-space"> </span><span class="cpp1-symbol">{</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* If no error is received... */ </span><span class="cpp1-space"> TranslateMessage</span><span class="cpp1-symbol">(&</span><span class="cpp1-identifier">msg</span><span class="cpp1-symbol">);</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* Translate key codes to chars if present */ </span><span class="cpp1-space"> DispatchMessage</span><span class="cpp1-symbol">(&</span><span class="cpp1-identifier">msg</span><span class="cpp1-symbol">);</span><span class="cpp1-space"> </span><span class="cpp1-comment">/* Send it to WndProc */ </span><span class="cpp1-space"> </span><span class="cpp1-symbol">} </span><span class="cpp1-space"> </span><span class="cpp1-reservedword">return</span><span class="cpp1-space"> msg</span><span class="cpp1-symbol">.</span><span class="cpp1-identifier">wParam</span><span class="cpp1-symbol">; } </span></span> </code></pre> </body> </html>