現在Win32APIを用いてプログラムの作成を行っているのですが, ウィンドウの生成自体はうまくいったものの
ウィンドウが読み込み状態から動きません. 以下のようにコードを組んでいるのですがご指導お願いします.
Win32
1//======================================================== 2// ヘッダファイル 3//======================================================== 4 5#include"Main.h" 6 7//======================================================== 8// ウィンドウ関連 9//======================================================== 10 11//std::vector<HWND> g_WinHandle; // ウィンドウハンドル 12 13HWND g_WinHandle[4]; //ウィンドウハンドル 14 15//======================================================== 16// 関数プロトタイプ 17//======================================================== 18 19LRESULT CALLBACK MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 20HRESULT AppLoop(); 21 22//======================================================== 23// WinMainエントリーポイント 24//======================================================== 25int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmndLine, int nCmdShow) 26{ 27 28 //---------------------------------------------------- 29 // ウィンドウクラスの作成・登録 30 //---------------------------------------------------- 31 WNDCLASS WindowClass; // 登録ウィンドウクラス 32 WCHAR szWindowClass[] = { L"Sample" }; // 登録ウィンドウクラス名 33 WCHAR szWindowName[] = { L"Sample - Windowed" }; // ウィンドウ名 34 DWORD dwStyle = WS_OVERLAPPEDWINDOW; // ウィンドウスタイル 35 36 //WCHAR szExePath[MAX_PATH]; 37 //GetModuleFileName(NULL, szExePath, MAX_PATH); 38 //HICON hIcon = ExtractIcon(hInstance, szExePath, 0); 39 40 ZeroMemory(&WindowClass, sizeof(WNDCLASS)); 41 WindowClass.style = CS_DBLCLKS; 42 WindowClass.hInstance = hInstance; 43 WindowClass.lpszClassName = szWindowClass; 44 WindowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); 45 WindowClass.hIcon = NULL; 46 WindowClass.hCursor = NULL; 47 WindowClass.lpfnWndProc = MsgProc; 48 49 // ウィンドウ登録 50 ATOM ClassAtom = RegisterClass(&WindowClass); 51 if (ClassAtom == 0) { 52 DWORD error = GetLastError(); // 最新エラーコード取得 53 if (ERROR_CLASS_ALREADY_EXISTS != error) { 54 MessageBox(NULL, L"ウィンドウクラスの登録に失敗しました。", L"Error", MB_OK | MB_ICONEXCLAMATION); 55 return E_FAIL; 56 } 57 } 58 59 //---------------------------------------------------- 60 // ウィンドウクラスの作成 61 //---------------------------------------------------- 62 HWND hWnd = CreateWindow( 63 szWindowClass, // 登録ウィンドウクラス名 64 szWindowName, // ウィンドウ名 65 dwStyle, // ウィンドウスタイル 66 0, 0, // ウィンドウ位置 67 MAINWIN_WIDTH, // ウィンドウ幅 68 MAINWIN_HEIGHT, // ウィンドウ高さ 69 NULL, // 親ウィンドウハンドル 70 0, // メニューハンドル・子ウィンドウID 71 WindowClass.hInstance, // Appインスタンスのハンドル 72 NULL // ウィンドウ作成データ 73 ); 74 75 // ウィンドウ表示 76 ShowWindow(hWnd, SW_SHOWDEFAULT); 77 g_WinHandle[0] = hWnd; 78 79 //if (hWnd) { 80 // MessageBox(hWnd, L"ウィンドウが生成されました.", L"情報", MB_OK); 81 82 //} 83 //else { 84 // MessageBox(NULL, L"ウィンドウの生成に失敗しました.", NULL, MB_OK | MB_ICONERROR); 85 //} 86 87 //---------------------------------------------------- 88 // アプリケーションループ 89 //---------------------------------------------------- 90 AppLoop(); 91 92 return 0; 93 94} 95 96//======================================================== 97// アプリケーションループ 98//======================================================== 99HRESULT AppLoop() 100{ 101 HRESULT hr = S_OK; 102 103 //---------------------------------------------------- 104 // メッセージループ 105 //---------------------------------------------------- 106 bool bGotMsg; 107 MSG msg; 108 109 msg.message = WM_NULL; 110 PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE); 111 112 HWND hWnd = g_WinHandle[0]; 113 114 while (WM_QUIT != msg.message) { 115 116 // メッセージのチェック 117 bGotMsg = (PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE) != 0); 118 119 if (bGotMsg) { 120 if (0 == TranslateAccelerator(hWnd, NULL, &msg)) { 121 TranslateMessage(&msg); // 文字メッセージに変換 122 DispatchMessage(&msg); // プロシージャに送出 123 } 124 } 125 126 } 127 128 return hr; 129} 130 131 132//======================================================== 133// メッセージ・プロシージャ 134//======================================================== 135LRESULT CALLBACK MsgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 136{ 137 138 switch (uMsg){ 139 140 case WM_DESTROY: 141 PostQuitMessage(0); 142 return 0; 143 } 144 145 return DefWindowProc(hWnd, uMsg, wParam, lParam); 146 147}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。