質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

ウィンドウをESCキーで閉じたい

futonmin
futon03

総合スコア33

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

5回答

1評価

2クリップ

635閲覧

投稿2022/02/08 08:27

編集2022/02/12 18:51

前提・実現したいこと

ウィンドウを表示し、ESCキーでウィンドウを閉じる処理を書きましたが、
ESCキーを押してもウィンドウが閉じません。
ESCキーを押すとウィンドウが固まります。

c++

#include <windows.h> //***************************************************************************** // マクロ定義 //***************************************************************************** #define WND_CLASS_NAME TEXT("My_Window") #define SCREEN_WIDTH (1280) // ウインドウの幅 #define SCREEN_HEIGHT (720) // ウインドウの高さ #define SCREEN_CENTER_X (SCREEN_WIDTH/2) // ウインドウの中心X座標 #define SCREEN_CENTER_Y (SCREEN_HEIGHT/2) // ウインドウの中心Y座標 //***************************************************************************** // プロトタイプ宣言 //***************************************************************************** LRESULT CALLBACK WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); // https://www.keicode.com/winprimer/wp11.php int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hWnd; WNDCLASSEX wcl; wcl.cbSize = sizeof(WNDCLASSEX); wcl.hInstance = hInstance; wcl.lpszClassName = WND_CLASS_NAME; wcl.lpfnWndProc = WindowProc; wcl.style = NULL; wcl.hIcon = NULL; wcl.hIconSm = NULL; wcl.hCursor = LoadCursor(NULL, IDC_ARROW); wcl.lpszMenuName = NULL; wcl.cbClsExtra = 0; wcl.cbWndExtra = 0; wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); if (!RegisterClassEx(&wcl)) { return FALSE; } // ウィンドウの作成 hWnd = CreateWindowEx( NULL, WND_CLASS_NAME, WND_CLASS_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); MSG msg; BOOL bRet; while ((bRet = GetMessage(&msg, hWnd, 0, 0)) != 0) { if (bRet == -1) { break; } else { DispatchMessage(&msg); } } return msg.wParam; } LRESULT CALLBACK WindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: ::PostQuitMessage(0); break; // ここがうまくいかない case WM_KEYDOWN: //----- キーボードが押された switch (wParam) { case VK_ESCAPE: // [ESC]キーが押された PostMessage(hWnd, WM_CLOSE, 0, 0); // [x]が押されたように振舞う return 0; } break; case WM_MENUCHAR: return MNC_CLOSE << 16; // [Alt]+[Enter]時のBEEPを抑止 default: break; } return DefWindowProc(hWnd, uMsg, wParam, lParam); }

補足情報(FW/ツールのバージョンなど)

Windows10
Visual Studio 2019

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。