Advertisement
Guest User

Untitled

a guest
May 21st, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.25 KB | None | 0 0
  1. // ヘッダファイルのインクルード
  2. // 既定のヘッダファイル
  3. #include <windows.h> // 標準WindowsAPI
  4. #include <tchar.h> // TCHAR型
  5.  
  6. // 関数のプロトタイプ宣言
  7. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); // ウィンドウメッセージに対して独自の処理をするように定義したコールバック関数WindowProc.
  8.  
  9. // _tWinMain関数の定義
  10. int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) {
  11.  
  12. // 変数の宣言
  13. HWND hWnd; // CreateWindowで作成したウィンドウのウィンドウハンドルを格納するHWND型変数hWnd.
  14. MSG msg; // ウィンドウメッセージ情報を格納するMSG構造体型変数msg.
  15. WNDCLASS wc; // ウィンドウクラス情報をもつWNDCLASS構造体型変数wc.
  16.  
  17. // ウィンドウクラスの設定
  18. wc.lpszClassName = _T("Ellipse"); // ウィンドウクラス名は"Ellipse".
  19. wc.style = CS_HREDRAW | CS_VREDRAW; // スタイルはCS_HREDRAW | CS_VREDRAW.
  20. wc.lpfnWndProc = WindowProc; // ウィンドウプロシージャは独自の処理を定義したWindowProc.
  21. wc.hInstance = hInstance; // インスタンスハンドルは_tWinMainの引数.
  22. wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // アイコンはアプリケーション既定のもの.
  23. wc.hCursor = LoadCursor(NULL, IDC_ARROW); // カーソルは矢印.
  24. wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 背景は白ブラシ.
  25. wc.lpszMenuName = NULL; // メニューはなし.
  26. wc.cbClsExtra = 0; // 0でいい.
  27. wc.cbWndExtra = 0; // 0でいい.
  28.  
  29. // ウィンドウクラスの登録
  30. if (!RegisterClass(&wc)) { // RegisterClassでウィンドウクラスを登録し, 0が返ったらエラー.
  31.  
  32. // エラー処理
  33. MessageBox(NULL, _T("RegisterClass failed!"), _T("Ellipse"), MB_OK | MB_ICONHAND); // MessageBoxで"RegisterClass failed!"とエラーメッセージを表示.
  34. return -1; // 異常終了(1)
  35.  
  36. }
  37.  
  38. // ウィンドウの作成
  39. hWnd = CreateWindow(_T("Ellipse"), _T("Ellipse"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); // CreateWindowで, 上で登録した"Ellipse"ウィンドウクラスのウィンドウを作成.
  40. if (hWnd == NULL) { // ウィンドウの作成に失敗したとき.
  41.  
  42. // エラー処理
  43. MessageBox(NULL, _T("CreateWindow failed!"), _T("Ellipse"), MB_OK | MB_ICONHAND); // MessageBoxで"CreateWindow failed!"とエラーメッセージを表示.
  44. return -2; // 異常終了(2)
  45.  
  46. }
  47.  
  48. // ウィンドウの表示
  49. ShowWindow(hWnd, SW_SHOW); // ShowWindowでSW_SHOWを指定してウィンドウの表示.
  50.  
  51. // メッセージループ
  52. while (GetMessage(&msg, NULL, 0, 0) > 0) { // GetMessageでメッセージを取得, 戻り値が0より大きい間はループし続ける.
  53.  
  54. // ウィンドウメッセージの送出
  55. DispatchMessage(&msg); // DispatchMessageで受け取ったメッセージをウィンドウプロシージャ(この場合は独自に定義したWindowProc)に送出.
  56.  
  57. }
  58.  
  59. // プログラムの終了
  60. return (int)msg.wParam; // 終了コード(msg.wParam)を戻り値として返す.
  61.  
  62. }
  63.  
  64. // WindowProc関数の定義
  65. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { // ウィンドウメッセージに対して独自の処理をするように定義したウィンドウプロシージャ.
  66.  
  67. // ウィンドウメッセージに対する処理.
  68. switch (uMsg) { // switch-casa文でuMsgの値ごとに処理を振り分ける.
  69.  
  70. // ウィンドウの作成が開始された時.
  71. case WM_CREATE: // ウィンドウの作成が開始された時.(uMsgがWM_CREATEの時.)
  72.  
  73. // WM_CREATEブロック
  74. {
  75.  
  76. // ウィンドウ作成成功
  77. return 0; // return文で0を返して, ウィンドウ作成成功とする.
  78.  
  79. }
  80.  
  81. // 既定の処理へ向かう.
  82. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  83.  
  84. // ウィンドウが破棄された時.
  85. case WM_DESTROY: // ウィンドウが破棄された時.(uMsgがWM_DESTROYの時.)
  86.  
  87. // WM_DESTROYブロック
  88. {
  89.  
  90. // 終了メッセージの送信.
  91. PostQuitMessage(0); // PostQuitMessageで終了コードを0としてWM_QUITメッセージを送信.(するとメッセージループのGetMessageの戻り値が0になるので, メッセージループから抜ける.)
  92.  
  93. }
  94.  
  95. // 既定の処理へ向かう.
  96. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  97.  
  98. // 画面の描画を要求された時.
  99. case WM_PAINT: // 画面の描画を要求された時.(uMsgがWM_PAINTの時.)
  100.  
  101. // WM_PAINTブロック
  102. {
  103.  
  104. // このブロックのローカル変数・配列の宣言と初期化.
  105. HDC hDC; // デバイスコンテキストハンドルを格納するHDC型変数hDC.
  106. PAINTSTRUCT ps; // ペイント情報を管理するPAINTSTRUCT構造体型の変数ps.
  107.  
  108. // ウィンドウの描画開始
  109. hDC = BeginPaint(hwnd, &ps); // BeginPaintでこのウィンドウの描画の準備をする. 戻り値にはデバイスコンテキストハンドルが返るので, hDCに格納.
  110.  
  111. // 楕円の描画
  112. Ellipse(hDC, 50, 50, 450, 450); // Ellipseで左上が(50, 50), 右下が(450, 450)の座標の矩形に内接する楕円を描画.
  113.  
  114. // ウィンドウの描画終了
  115. EndPaint(hwnd, &ps); // EndPaintでこのウィンドウの描画処理を終了する.
  116.  
  117. }
  118.  
  119. // 既定の処理へ向かう.
  120. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  121.  
  122. // メニュー項目が選択されたり, ボタンなどのコントロールが押されたりした時.
  123. case WM_COMMAND: // メニュー項目が選択されたり, ボタンなどのコントロールが押されたりした時.(uMsgがWM_COMMANDの時.)
  124.  
  125. // 既定の処理へ向かう.
  126. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  127.  
  128. // 上記以外の時.
  129. default: // 上記以外の値の時の既定処理.
  130.  
  131. // 既定の処理へ向かう.
  132. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
  133.  
  134. }
  135.  
  136. // あとは既定の処理に任せる.
  137. return DefWindowProc(hwnd, uMsg, wParam, lParam); // 戻り値も含めDefWindowProcに既定の処理を任せる.
  138.  
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement