スケルトンコード (修正を要する箇所)
[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] [トップ] [戻る]