前提・実現したいこと
ウィンドウを表示し、ESCキーでウィンドウを閉じる処理を書きましたが、
ESCキーを押してもウィンドウが閉じません。
ESCキーを押すとウィンドウが固まります。
c++
1#include <windows.h> 2 3//***************************************************************************** 4// マクロ定義 5//***************************************************************************** 6#define WND_CLASS_NAME TEXT("My_Window") 7 8#define SCREEN_WIDTH (1280) // ウインドウの幅 9#define SCREEN_HEIGHT (720) // ウインドウの高さ 10#define SCREEN_CENTER_X (SCREEN_WIDTH/2) // ウインドウの中心X座標 11#define SCREEN_CENTER_Y (SCREEN_HEIGHT/2) // ウインドウの中心Y座標 12 13//***************************************************************************** 14// プロトタイプ宣言 15//***************************************************************************** 16LRESULT CALLBACK WindowProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); 17 18// https://www.keicode.com/winprimer/wp11.php 19int WINAPI WinMain( 20 HINSTANCE hInstance, 21 HINSTANCE hPrevInstance, 22 LPSTR lpCmdLine, 23 int nCmdShow) { 24 25 HWND hWnd; 26 WNDCLASSEX wcl; 27 28 wcl.cbSize = sizeof(WNDCLASSEX); 29 wcl.hInstance = hInstance; 30 wcl.lpszClassName = WND_CLASS_NAME; 31 wcl.lpfnWndProc = WindowProc; 32 wcl.style = NULL; 33 wcl.hIcon = NULL; 34 wcl.hIconSm = NULL; 35 wcl.hCursor = LoadCursor(NULL, IDC_ARROW); 36 wcl.lpszMenuName = NULL; 37 wcl.cbClsExtra = 0; 38 wcl.cbWndExtra = 0; 39 wcl.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 40 41 if (!RegisterClassEx(&wcl)) { 42 return FALSE; 43 } 44 45 // ウィンドウの作成 46 hWnd = CreateWindowEx( 47 NULL, 48 WND_CLASS_NAME, 49 WND_CLASS_NAME, 50 WS_OVERLAPPEDWINDOW, 51 CW_USEDEFAULT, 52 CW_USEDEFAULT, 53 CW_USEDEFAULT, 54 CW_USEDEFAULT, 55 NULL, 56 NULL, 57 hInstance, 58 NULL); 59 60 if (!hWnd) { 61 return FALSE; 62 } 63 64 ShowWindow(hWnd, nCmdShow); 65 66 MSG msg; 67 BOOL bRet; 68 69 while ((bRet = GetMessage(&msg, hWnd, 0, 0)) != 0) { 70 71 if (bRet == -1) { 72 break; 73 } 74 else { 75 DispatchMessage(&msg); 76 } 77 } 78 79 return msg.wParam; 80} 81 82LRESULT CALLBACK WindowProc( 83 HWND hWnd, 84 UINT uMsg, 85 WPARAM wParam, 86 LPARAM lParam) { 87 88 switch (uMsg) { 89 case WM_DESTROY: 90 ::PostQuitMessage(0); 91 break; 92 // ここがうまくいかない 93 case WM_KEYDOWN: //----- キーボードが押された 94 switch (wParam) { 95 case VK_ESCAPE: // [ESC]キーが押された 96 PostMessage(hWnd, WM_CLOSE, 0, 0); // [x]が押されたように振舞う 97 return 0; 98 } 99 break; 100 case WM_MENUCHAR: 101 return MNC_CLOSE << 16; // [Alt]+[Enter]時のBEEPを抑止 102 default: 103 break; 104 } 105 106 return DefWindowProc(hWnd, uMsg, wParam, lParam); 107}
補足情報(FW/ツールのバージョンなど)
Windows10
Visual Studio 2019
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。