スケルトンコード
(3大要素)
[index] [プレーン] [ストレート] [3大要素] [修正を要する箇所] [一行解説] [詳細]  

 

 Windows API (Win32 API) と C/C++ でプログラムを組む場合のスケルトンコードと呼ばれるものです。

 この骨格は、プログラムを書き始めるときはいつもつかいます。そのままコンパイルすると、なにもしないがおおきいウィンドウが一つでてくるアプリケーションが作成できます。

 メッセージループ ウィンドウクラスの登録部分 ウィンドウプロシージャ の3つを色で分けたものです。

メッセージループのところを見ると、while 文で半永久的なループにおちいっていることがわかります。
だからメッセージループといいます。
このループは特定のメッセージにより終了し、制御がこのループを脱出すればアプリケーションも終了します。
ウィンドウクラスの登録とは、RegisterClass() 関数により"ウィンドウクラス"を"登録"していることを指しています。
ウィンドウプロシージャとは、色で示されている "WndProc" 関数のことを言っています。

 


   
//
// program "basecode.cpp"
// bcc32 -tW basecode.cpp


  #define _WIN32_WINNT 0x400
  #define  WINVER      0x400
  #define _WIN32_IE    0x0501

//#define WIN32_LEAN_AND_MEAN
  #define STRICT


  #include <windows.h>
  #include <windowsx.h>
  #include <commctrl.h>
  #include <commdlg.h>


BOOL InitApp( HINSTANCE ) ;
BOOL InitWnd( HINSTANCE, int ) ;
LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM ) ;


HINSTANCE hAppInst ;


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hInst_prev,
                    LPSTR lpszCmdLine, int nCmdShow )
{
     BOOL ret ; MSG msg ;

     if ( ! hInst_prev )
     {    if ( ! InitApp( hInstance )) return FALSE ; }

     if ( ! InitWnd( hInstance, nCmdShow )) return FALSE ;

     while ( 0 != ( ret = GetMessage( &msg, NULL, 0, 0 )))
     {
        if ( ret != -1 ) {
           TranslateMessage( &msg ) ;
            DispatchMessage( &msg ) ;
        }
     }


     return ( msg.wParam ) ;
}
 

BOOL InitApp( HINSTANCE hInstance )
{
     WNDCLASS wc ;
     wc.style         = CS_HREDRAW | CS_VREDRAW ;
     wc.lpfnWndProc   = WndProc ;
     wc.cbClsExtra    = 0 ;
     wc.cbWndExtra    = 0 ;
     wc.hInstance     = hInstance ;
     wc.hIcon   = ( HICON )   LoadIcon  ( NULL, IDI_APPLICATION ) ;
     wc.hCursor = ( HCURSOR ) LoadCursor( NULL, IDC_ARROW ) ;
     wc.hbrBackground = ( HBRUSH ) GetStockObject( LTGRAY_BRUSH ) ;
     wc.lpszMenuName  = "MYMENU" ;
     wc.lpszClassName = ( LPCTSTR ) "MyApp_Classification_1" ;

     hAppInst = hInstance ;

     return( RegisterClass( &wc )) ; // この RegisterClass() 関数が、 システム (OS)に、ウィンドウクラス "MyApp_Classification_1" を "登録" する。そして、"登録" したものをあとからすぐまた使う ( CreateWindow() ).
}


BOOL InitWnd( HINSTANCE hInstance, int nCmdShow )
{
     HWND hWnd ;
          hWnd = CreateWindow(
             (LPCTSTR) "MyApp_Classification_1",
             (LPCTSTR) "My Project",
             WS_OVERLAPPEDWINDOW,
             CW_USEDEFAULT, CW_USEDEFAULT ,
             CW_USEDEFAULT, CW_USEDEFAULT ,
             NULL, NULL, hInstance,
             NULL ) ;

     if ( ! hWnd ) return FALSE ;

     ShowWindow( hWnd, nCmdShow ) ; UpdateWindow( hWnd ) ;
     SetFocus( hWnd ) ;

     return TRUE ;
}


LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
      switch( msg )
      {
           case WM_CREATE :
           break ;

           case WM_COMMAND :
                switch( LOWORD( wParam ))
                {
                   default :
                   return( DefWindowProc( hWnd, msg, wParam, lParam )) ;
                }
           break ;
           case WM_CLOSE :
                  DestroyWindow( hWnd ) ;
           break ;
           case WM_DESTROY :
                  PostQuitMessage( 0 ) ;
           break ;
           default :
                  return( DefWindowProc( hWnd, msg, wParam, lParam )) ;
      }

      return 0L ;
}

 


 

[level4] [トップ] [戻る]