🦁
WindowsコンソールアプリケーションからShowWindow
VisualStudioで空のプロジェクトやコンソールアプリで開始したりしてもShowWindowを呼び出してウインドウを表示したい。
前提
プロジェクトのプロパティの[リンカー] > [システム] > [サブシステム]がコンソールになっている
重要なのはこの3つ
main.cpp
HINSTANCE hInstance = GetModuleHandle(nullptr);
HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
int nCmdShow = SW_NOMAL;
ShowWindow(hWnd, nCmdShow);
ShowWindow()の第二引数は、リファレンスによるとWinMainから渡される値が必要らしいが無視して良い
SW_NOMALまたは、SW_SHOWNORMALで問題なく動作する
Discussion
普通に
CreateWindow
とかすればウィンドウは作れますが……。GetModuleHandle
で取得できるのは「モジュールハンドル」ShowWindow
の第一引数は「ウインドウハンドル」です。
モジュールハンドル(kernel32.dll由来)とウインドウハンドル(user32.dll/GDI由来)は別物なので、うまくいっても「たまたま」でしょう。