Windows

サンプル

  1. #include <windows.h>
  2. #include <tchar.h>
  3.  
  4. // プロトタイプ宣言
  5. LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp);
  6.  
  7.  
  8. // 開始位置
  9. int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd)
  10. {
  11. WNDCLASSEX wc;
  12. HWND hWnd;
  13. MSG msg;
  14.  
  15. // ウィンドウクラスの情報を設定
  16. wc.cbSize = sizeof(wc); // 構造体サイズ
  17. wc.style = CS_HREDRAW | CS_VREDRAW; // スタイル
  18. wc.lpfnWndProc = WndProc; // ウィンドウプロシージャ
  19. wc.cbClsExtra = 0; // 拡張情報1
  20. wc.cbWndExtra = 0; // 拡張情報2
  21. wc.hInstance = hInst; // インスタンスハンドル
  22. wc.hIcon = (HICON)LoadImage( // アイコン
  23. NULL, MAKEINTRESOURCE(IDI_APPLICATION), IMAGE_ICON,
  24. 0, 0, LR_DEFAULTSIZE | LR_SHARED
  25. );
  26. wc.hIconSm = wc.hIcon; // 子アイコン
  27. wc.hCursor = (HCURSOR)LoadImage( // マウスカーソル
  28. NULL, MAKEINTRESOURCE(IDC_ARROW), IMAGE_CURSOR,
  29. 0, 0, LR_DEFAULTSIZE | LR_SHARED
  30. );
  31. wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // ウィンドウ背景
  32. wc.lpszMenuName = NULL; // メニュー名
  33. wc.lpszClassName = _T("Default Class Name");// ウィンドウクラス名
  34.  
  35. // ウィンドウクラスを登録する
  36. if( RegisterClassEx( &wc ) == 0 ){ return 1; }
  37.  
  38. // ウィンドウを作成する
  39. hWnd = CreateWindow(
  40. wc.lpszClassName, // ウィンドウクラス名
  41. _T("Sample Program"), // タイトルバーに表示する文字列
  42. WS_OVERLAPPEDWINDOW, // ウィンドウの種類
  43. CW_USEDEFAULT, // ウィンドウを表示する位置(X座標)
  44. CW_USEDEFAULT, // ウィンドウを表示する位置(Y座標)
  45. CW_USEDEFAULT, // ウィンドウの幅
  46. CW_USEDEFAULT, // ウィンドウの高さ
  47. NULL, // 親ウィンドウのウィンドウハンドル
  48. NULL, // メニューハンドル
  49. hInst, // インスタンスハンドル
  50. NULL // その他の作成データ
  51. );
  52. if( hWnd == NULL ){ return 1; }
  53.  
  54. // ウィンドウを表示する
  55. ShowWindow( hWnd, SW_SHOW );
  56. UpdateWindow( hWnd );
  57.  
  58. // メッセージループ
  59. while( 1 )
  60. {
  61. BOOL ret = GetMessage( &msg, NULL, 0, 0 ); // メッセージを取得する
  62. if( ret == 0 || ret == -1 )
  63. {
  64. // アプリケーションを終了させるメッセージが来ていたら、
  65. // あるいは GetMessage() が失敗したら( -1 が返されたら )、ループを抜ける
  66. break;
  67. }
  68. else
  69. {
  70. // メッセージを処理する
  71. TranslateMessage( &msg );
  72. DispatchMessage( &msg );
  73. }
  74. }
  75.  
  76. return 0;
  77. }
  78.  
  79. // ウィンドウプロシージャ
  80. LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
  81. {
  82. switch( msg )
  83. {
  84. case WM_DESTROY: // ウィンドウを破棄するとき
  85. PostQuitMessage( 0 );
  86. return 0;
  87. }
  88.  
  89. // 他のメッセージは、デフォルトの処理を行う
  90. return DefWindowProc( hWnd, msg, wp, lp );
  91. }
  92.  
  93.  

コンパイル

C:\MinGW>gcc win_sample01.c -o win_sample01.exe -lgdi32
 
C:\MinGW>
 
※コンパイルオプションとして「-lgdi32」を指定

実行




サンプルリスト

ウィンドウ表示

メニュー

コントロール1

コントロール2





ウィンドウクラス

WNDCLASSEX構造体

Class Style





ウィンドウプロシージャ

CallBack





メッセージ

BMメッセージ

EMメッセージ

WMメッセージ





最終更新:2010年06月28日 13:44