WinMain Example

Modified: 14-Jan-2005
Date: 22-May-2000
(c) Copyright 1997-2000 by H.Fujii

[前へ][次へ]
では、WinMain の実例を示しましょう。これと、 次に示す Windows Message を処理する 部分とで、一つの完結したプログラムになります。Windows Message を 処理する手続きは WNDCLASS 構造体の lpfnWndProc に 設定します。ここでは WndProc() という名前にしてあります。 なお、GetStockObject() 関数を使うために、library として user32.lib の他に gdi32.lib が必要になります。
#define STRICT
#include <windows.h>

#define MY_CLASS_NAME   "MyClass"
#define MY_WINDOW_TITLE "MyTitle"

/* Prototype */
LRESULT CALLBACK
  WndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
  LPSTR lpCmdLine, int nCmdShow )
{
  MSG msg;
  WNDCLASS wc;
  HWND hwnd;

  /* Register the window class for the main window. */
  if( hPrevInstance == NULL )
  {
    wc.style = 0; 
    wc.lpfnWndProc = (WNDPROC)WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon( (HINSTANCE)NULL, IDI_APPLICATION );
    wc.hCursor = LoadCursor( (HINSTANCE)NULL, IDC_ARROW );
    wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
    wc.lpszMenuName = 0;
    wc.lpszClassName = MY_CLASS_NAME;
    if ( RegisterClass( &wc ) == 0 )
      return 0;
  }
	
  /* Create our window. */
  hwnd = CreateWindow( MY_CLASS_NAME, MY_WINDOW_TITLE, WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
    (HWND)NULL, (HMENU)NULL, hInstance, (LPVOID)NULL );
  /*
   * If the window cannot be created, terminate
   * the application.
   */
  if( hwnd == NULL )
    return 0;

  /* Show the window and paint its contents. */
  ShowWindow( hwnd, nCmdShow );
  UpdateWindow( hwnd );

  /* Start the message loop. */
  while( GetMessage( &msg, (HWND)NULL, 0, 0 ) )
  {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
  }

  /* Return the exit code to the system. */
  return msg.wParam;
}

[前へ][次へ]