Win32APIの話になるのですが、
以下のソースコードを実行しようとしたときに「名前を付けて保存」ダイアログが出てきます。
しかし、ファイル名を入力するときに「全角/半角」キーを押してもIMEの切り替えができなく、全部半角で入力されてしまいます。
[全角/半角]切替ができないというだけで、例えばメモ帳にファイル名を書いてそれをコピペならできます。
また、アプリ側からデフォルトのファイル名に全角の使用はできます。
他のアプリ(メモ帳とか)だとファイル名に全角を使えるのでPCの問題じゃないと思われます。
GetSaveFileName()でファイル名を全角入力もできるようにするためには何か特別なフラグが必要なのでしょうか?
または、Visual Studioのプロジェクト設定の問題でしょうか?
多分どこか抜けてるだけだと思いますけど…
別な解決案としてMFCやC#などでdllを作成するというのもありますけど、これの為にdllは作りたくないです
他のサイトを調べてもそれらしき情報が見当たらなかったので、詳しい方解決策をご教授お願いします。
コード:
OPENFILENAME OpenFile = { OPENFILENAME_SIZE_VERSION_400 };
TCHAR szPath[MAX_PATH] = { 0 };
TCHAR szFile[MAX_PATH] = _T("イメージ.png"); // デフォルトのファイル名
GetCurrentDirectory(MAX_PATH, szPath);
OpenFile.hwndOwner = GetMainWindowHandle();
OpenFile.lpstrInitialDir = szPath;
OpenFile.lpstrFile = szFile;
OpenFile.nMaxFile = MAX_PATH;
OpenFile.lpstrFilter = "PNGファイル(*.png)\0*.png\0";
OpenFile.lpstrTitle = "名前を付けて保存";
OpenFile.nFilterIndex = 1;
OpenFile.Flags = OFN_EXPLORER | OFN_CREATEPROMPT | OFN_OVERWRITEPROMPT;
// ここで「名前を付けて保存」ダイアログを表示します
if (GetSaveFileName(&OpenFile)) {
/* 色々 */
// 保存
SaveDrawScreenToPNG(0, 0, nWidth, nHeight, szFile); // 画像を保存
SetDrawScreen(DX_SCREEN_BACK); // 出力先を戻す
MessageBox(NULL, _T("完了"), _T("Dx Image Conbiner"), MB_ICONINFORMATION);
}
実行結果:
環境
OS: Windows 11 Pro (21H2)
開発環境: VisualStudio2022
アプリ: 32ビット(x86)
文字セット: マルチバイト
使用ライブラリ: DXライブラリ(Ver 3.22c)