スケルトンコード (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] [トップ] [戻る]