ファイル選択をするときは、OPENFILENAME構造体をGetOpenFileNameなどに渡す必要がある。
OPENFILENAMEA (commdlg.h) - Win32 apps | Microsoft Learn
どれくらい最低限渡せば動くのか。
// メニュー項目が選択されたり, ボタンなどのコントロールが押されたりした時. case WM_COMMAND: // メニュー項目が選択されたり, ボタンなどのコントロールが押されたりした時.(uMsgがWM_COMMANDの時.) // WM_COMMANDブロック { // どのメニュー項目が選択されたかを判定する. switch (LOWORD(wParam)){ // LOWORD(wParam)で選択されたメニュー項目のIDが取得できるので, その値で判定する. // 取得したIDごとに処理を分岐. // Openが選択された時. case ID_FILE_OPEN: // ID_FILE_OPENブロック { // 変数の宣言・初期化. OPENFILENAME ofn = {0}; // OPENFILENAME構造体変数ofnを{0}で初期化. // ファイル選択. if (!GetOpenFileName(&ofn)){ // GetOpenFileNameでファイルを選択. // 選択しなかった場合.(キャンセル) return 0; // 処理したので戻り値として0を返す. } } // 既定の処理へ向かう. break; // breakで抜けて, 既定の処理(DefWindowProc)へ向かう.
初期化だけで渡すと、
選択しても、
何も起きない。
ofn.lStructSizeにsizeof(OPENFILENAME)を渡すだけで、
選択したら、
ファイル選択ダイアログが表示された。
Sample/winapi/OPENFILENAME/OPENFILENAME/src/OPENFILENAME at master · bg1bgst333/Sample · GitHub