0から始めるVisualStudio2022:ソフト開発塾

前回のダイアログボックスにメニューを修正して
ファイルオープンのダイアログを表示する。
GetOpenFileNameW を使用すればOKらしい。
dialog001_01.cppのソースを次のように修正する。
#include <windows.h>
#include "resource.h"

BOOL dialog_proc(
	HWND hDlg,
	UINT msg,
	WPARAM wPara,
	LPARAM lPara
) {

	return FALSE;
}
BOOL dialog_cmd(
	HWND hDlg,
	WPARAM wPara,
	LPARAM lPara
) {
	switch (LOWORD(wPara)) {
	case ID_MENU_FILEOPEN:
	        //https://learn.microsoft.com/ja-jp/windows/win32/dlgbox/using-common-dialog-boxes
	        OPENFILENAME ofn;       // common dialog box structure
	        char szFile[260];       // buffer for file name
	        // Initialize OPENFILENAME
	        ZeroMemory(&ofn, sizeof(ofn));
	        ofn.lStructSize = sizeof(ofn);
	        ofn.hwndOwner = hDlg;
	        ofn.lpstrFile = (LPWSTR)szFile;
	        // Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
	        // use the contents of szFile to initialize itself.
	        ofn.lpstrFile[0] = '\0';
	        ofn.nMaxFile = sizeof(szFile);
	        ofn.lpstrFilter = TEXT("Text\0*.TXT\0All\0*.*\0");
	        ofn.nFilterIndex = 1;
	        ofn.lpstrFileTitle = NULL;
	        ofn.nMaxFileTitle = 0;
	        ofn.lpstrInitialDir = NULL;
	        ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

	        // Display the Open dialog box. 
	        if (GetOpenFileNameW(&ofn) == TRUE) {
	            MessageBoxW(hDlg, (LPWSTR)szFile, TEXT("OPEN FILE NAME"), MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL);
	        } else {
	            MessageBoxA(hDlg, "ERROR OPEN FILE NAME ", "err", MB_OK | MB_ICONINFORMATION | MB_SYSTEMMODAL);
	        }
		break;
	}
	return FALSE;
}









Top