ウィンドウから発せられるメッセージを処理する関数をウィンドウプロシージャと言います。
前章では、Windows API が用意している DefWindowProc関数を使いましたが、通常は、アプリケーションに合わせて、独自のウィンドウプロシージャを作ります。
#include <windows.h>
/* 独自に作るウィンドウプロシージャのプロトタイプ(関数前方宣言) */
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
/* メイン関数 */
int WINAPI WinMain      (HINSTANCE hInstance,
			 HINSTANCE hPrevInstance,
			 LPSTR     lpCmdLine,
			 int       nCmdShow)
{
  HWND     hwnd;
  WNDCLASS wc;
  MSG      msg;
  wc.style         = CS_HREDRAW | CS_VREDRAW;
  wc.lpfnWndProc   = WndProc;
  wc.cbClsExtra    = 0;
  wc.cbWndExtra    = 0;
  wc.hInstance     = hInstance;
  wc.hIcon         = NULL;
  wc.hCursor       = NULL;
  wc.hbrBackground = (HBRUSH)COLOR_BACKGROUND + 1;
  wc.lpszMenuName  = NULL;
  wc.lpszClassName = TEXT("WNDPROC");
  RegisterClass(&wc);
  hwnd             = CreateWindow(TEXT("WNDPROC"),
				  TEXT("Windows API Primer"),
				  WS_OVERLAPPEDWINDOW | WS_VISIBLE,
				  CW_USEDEFAULT, CW_USEDEFAULT, 300, 200,
				  NULL, NULL, hInstance, NULL);
  while (GetMessage(&msg, NULL, 0, 0))
    {
      DispatchMessage(&msg);
    }
    return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND      hwnd,
			 UINT      msg,
			 WPARAM    wParam,
			 LPARAM    lParam)
{
  switch (msg)
    {
    case WM_DESTROY:
      PostQuitMessage(0);
      break;
    }
  return DefWindowProc(hwnd, msg, wParam, lParam);
}
    
    
    
    この章で、アプリケーションの土台となる、メインウィンドウが完成しました。
    Windows API はウィンドウを表示するだけでも大量のコードが必要になります。今回のコードをひな型として、コピー&ペーストで使い回しても良いでしょう。