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

 

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

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

 スケルトンコード中、修正する可能性のある箇所 (自分で自由に付けてよいクラスの名前や、タイトルに表示される文字など軽い変更) を色で強調しています。

 ※ 段階に従って他の部分を修正することももちろんあります。


   
//
// 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 ; // ダブルクリックを扱いたいときは、CS_DBLCLKS も加える。扱わない場合は特に加えても感動はない。この、CS_ の「スタイル」 に関しては、WNDCLASS 構造体を参照.
     wc.lpfnWndProc   = WndProc ;
     wc.cbClsExtra    = 0 ;
     wc.cbWndExtra    = 0 ;
     wc.hInstance     = hInstance ;
     wc.hIcon   = ( HICON )   LoadIcon  ( NULL, IDI_APPLICATION ) ; // ウィンドウ左上や、このアプリケーションの実行ファイルをフォルダ上で表示するときの アイコン を指定できる。この例IDI_APPLICATIONではこれLoadIcon() 関数について自分でしらべてください.
     wc.hCursor = ( HCURSOR ) LoadCursor( NULL, IDC_ARROW ) ;       // カーソル の形状を指定できる。このIDC_ARROWの場合はこれ  。自分で作ったカーソルも指定できる。LoadCursor() 関数について自分でしらべてください.  
     wc.hbrBackground = ( HBRUSH ) GetStockObject( LTGRAY_BRUSH ) ; // 背景色。この場合は "ライトグレー"。自分でブラシ(色)を作ることもできる。GetStockObject() 関数を参照.
     wc.lpszMenuName  = "MYMENU" ;  // 使用するメニューの名前(テンプレート名)を指定する(テンプレートは主に [リソーススクリプト] に記述)。リソースのモジュールが、このアプリつまり、.exe 実行ファイルにくっつけ (リンク) られていなければ、ここでメニュー名を指定してもメニューは表示されない。メニューを使わないのであれば、 = NULL ; でも可.
     wc.lpszClassName = ( LPCTSTR ) "MyApp_Classification_1" ;         // ここは自由なウィンドウクラス名を名づけることができる。ただし、以下の CreateWindow() のところの指定も、同じ名前にする.

     hAppInst = hInstance ;

     return( RegisterClass( &wc )) ;
}


BOOL InitWnd( HINSTANCE hInstance, int nCmdShow )
{
     HWND hWnd ;
          hWnd = CreateWindow(
             (LPCTSTR) "MyApp_Classification_1", // 「wc.lpszClassName」 のところと同じものにする.
             (LPCTSTR) "My Project",        // タイトルに表示される文字。全くの自由.
             WS_OVERLAPPEDWINDOW,
             CW_USEDEFAULT, CW_USEDEFAULT , // ウィンドウの位置 (左 x, 上 y)。       0 ,0 ,    のようにすれば、ディスプレーの ひだり うえ (左上) にぴったりそろって出現する。.
             CW_USEDEFAULT, CW_USEDEFAULT , // ウィンドウの大きさ(幅 cx、高さ cy)。 100 ,50 , なら、わりと小さめのウィンドウが出る。...
             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 :
           // 初心者は、ここにいろいろ書いて実験を行う。WM_CREATE は、おおもとのウィンドウが "表示" される "直前" に (アプリ開始から終了までを通して「一回きり」) 送られてくるメッセージ。子ウィンドウを貼り付ける場合は普通ここでやる。...
           // MessageBox( NULL , " The \"window\" will be shown up right after you push \"OK\" BUTTON.\r\n\r\n GetReady !" , "Are You Ready ?" , MB_OK | MB_TASKMODAL ) ;
           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] [トップ] [戻る]