Revision: 8644 https://osdn.net/projects/ttssh2/scm/svn/commits/8644 Author: zmatsuo Date: 2020-03-28 00:48:29 +0900 (Sat, 28 Mar 2020) Log Message: ----------- フォルダ選択ダイアログを Unicode版に置き換え - doSelectFolderW()を使用するよう変更 - 内部で _SHBrowseForFolderW() を使用 - 元は doSelectFolder()、内部で SHBrowseForFolderA() を使用 Modified Paths: -------------- branches/unicode_macro_2/teraterm/common/ttlib.c branches/unicode_macro_2/teraterm/common/ttlib.h branches/unicode_macro_2/teraterm/common/ttlib_static.c branches/unicode_macro_2/teraterm/teraterm/addsetting.cpp branches/unicode_macro_2/teraterm/ttpmacro/ttl_gui.cpp -------------- next part -------------- Modified: branches/unicode_macro_2/teraterm/common/ttlib.c =================================================================== --- branches/unicode_macro_2/teraterm/common/ttlib.c 2020-03-27 15:48:19 UTC (rev 8643) +++ branches/unicode_macro_2/teraterm/common/ttlib.c 2020-03-27 15:48:29 UTC (rev 8644) @@ -1079,7 +1079,7 @@ // // cf. http://homepage2.nifty.com/DSS/VCPP/API/SHBrowseForFolder.htm // -int CALLBACK setDefaultFolder(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) +static int CALLBACK setDefaultFolder(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { if(uMsg == BFFM_INITIALIZED) { SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE, lpData); @@ -1114,10 +1114,10 @@ bi.lpfn = setDefaultFolder; bi.lParam = (LPARAM)def; // \x83t\x83H\x83\x8B\x83_\x91I\x91\xF0\x83_\x83C\x83A\x83\x8D\x83O\x82̕\\x8E\xA6 - pidlBrowse = SHBrowseForFolder(&bi); + pidlBrowse = SHBrowseForFolderA(&bi); if (pidlBrowse != NULL) { // PIDL\x8C`\x8E\xAE\x82̖߂\xE8\x92l\x82̃t\x83@\x83C\x83\x8B\x83V\x83X\x83e\x83\x80\x82̃p\x83X\x82ɕϊ\xB7 - if (SHGetPathFromIDList(pidlBrowse, buf)) { + if (SHGetPathFromIDListA(pidlBrowse, buf)) { // \x8E擾\x90\xAC\x8C\xF7 strncpy_s(path, pathlen, buf, _TRUNCATE); ret = TRUE; Modified: branches/unicode_macro_2/teraterm/common/ttlib.h =================================================================== --- branches/unicode_macro_2/teraterm/common/ttlib.h 2020-03-27 15:48:19 UTC (rev 8643) +++ branches/unicode_macro_2/teraterm/common/ttlib.h 2020-03-27 15:48:29 UTC (rev 8644) @@ -83,6 +83,7 @@ void get_lang_msgW(const char *key, wchar_t *buf, int buf_len, const wchar_t *def, const char *iniFile); int get_lang_font(PCHAR key, HWND dlg, PLOGFONT logfont, HFONT *font, const char *iniFile); DllExport BOOL doSelectFolder(HWND hWnd, char *path, int pathlen, const char *def, const char *msg); +BOOL doSelectFolderW(HWND hWnd, wchar_t *path, int pathlen, const wchar_t *def, const wchar_t *msg); DllExport void OutputDebugPrintf(const char *fmt, ...); void OutputDebugPrintfW(const wchar_t *fmt, ...); DllExport DWORD get_OPENFILENAME_SIZEA(); @@ -127,14 +128,12 @@ void SetDlgMenuTexts(HMENU hMenu, const DlgTextInfo *infos, int infoCount, const char *UILanguageFile); int GetMonitorDpiFromWindow(HWND hWnd); +#define get_OPENFILENAME_SIZE() get_OPENFILENAME_SIZEA() + #if defined(_UNICODE) -#define doSelectFolderT(p1, p2, p3, p4, p5) doSelectFolderW(p1, p2, p3, p4, p5) #define get_lang_msgT(p1, p2, p3, p4, p5) get_lang_msgW(p1, p2, p3, p4, p5) -#define get_OPENFILENAME_SIZE() get_OPENFILENAME_SIZEW() #else -#define doSelectFolderT(p1, p2, p3, p4, p5) doSelectFolder(p1, p2, p3, p4, p5) #define get_lang_msgT(p1, p2, p3, p4, p5) get_lang_msg(p1, p2, p3, p4, p5) -#define get_OPENFILENAME_SIZE() get_OPENFILENAME_SIZEA() #endif /* Modified: branches/unicode_macro_2/teraterm/common/ttlib_static.c =================================================================== --- branches/unicode_macro_2/teraterm/common/ttlib_static.c 2020-03-27 15:48:19 UTC (rev 8643) +++ branches/unicode_macro_2/teraterm/common/ttlib_static.c 2020-03-27 15:48:29 UTC (rev 8644) @@ -290,4 +290,56 @@ _OutputDebugStringW(tmp); } +static int CALLBACK setDefaultFolder(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) +{ + if(uMsg == BFFM_INITIALIZED) { + SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE, lpData); + } + return 0; +} + +BOOL doSelectFolderW(HWND hWnd, wchar_t *path, int pathlen, const wchar_t *def, const wchar_t *msg) +{ + BROWSEINFOW bi; + LPITEMIDLIST pidlRoot; // \x83u\x83\x89\x83E\x83Y\x82̃\x8B\x81[\x83gPIDL + LPITEMIDLIST pidlBrowse; // \x83\x86\x81[\x83U\x81[\x82\xAA\x91I\x91\xF0\x82\xB5\x82\xBDPIDL + wchar_t buf[MAX_PATH]; + BOOL ret = FALSE; + + // \x83_\x83C\x83A\x83\x8D\x83O\x95\\x8E\xA6\x8E\x9E\x82̃\x8B\x81[\x83g\x83t\x83H\x83\x8B\x83_\x82\xCCPIDL\x82\xF0\x8E擾 + // \x81\xA6\x88ȉ\xBA\x82̓f\x83X\x83N\x83g\x83b\x83v\x82\xF0\x83\x8B\x81[\x83g\x82Ƃ\xB5\x82Ă\xA2\x82\xE9\x81B\x83f\x83X\x83N\x83g\x83b\x83v\x82\xF0\x83\x8B\x81[\x83g\x82Ƃ\xB7\x82\xE9 + // \x8Fꍇ\x82́A\x92P\x82\xC9 bi.pidlRoot \x82ɂO\x82\xF0\x90ݒ肷\x82邾\x82\xAF\x82ł\xE0\x82悢\x81B\x82\xBB\x82̑\xBC\x82̓\xC1 + // \x8E\xEA\x83t\x83H\x83\x8B\x83_\x82\xF0\x83\x8B\x81[\x83g\x82Ƃ\xB7\x82鎖\x82\xE0\x82ł\xAB\x82\xE9\x81B\x8Fڍׂ\xCDSHGetSpecialFolderLoca + // tion\x82̃w\x83\x8B\x83v\x82\xF0\x8EQ\x8FƂ̎\x96\x81B + if (!SUCCEEDED(SHGetSpecialFolderLocation(hWnd, CSIDL_DESKTOP, &pidlRoot))) { + return FALSE; + } + + // BROWSEINFO\x8D\\x91\xA2\x91̂̏\x89\x8A\xFA\x92l\x90ݒ\xE8 + // \x81\xA6BROWSEINFO\x8D\\x91\xA2\x91̂̊e\x83\x81\x83\x93\x83o\x82̏ڍא\xE0\x96\xBE\x82\xE0\x83w\x83\x8B\x83v\x82\xF0\x8EQ\x8F\xC6 + bi.hwndOwner = hWnd; + bi.pidlRoot = pidlRoot; + bi.pszDisplayName = buf; + bi.lpszTitle = msg; + bi.ulFlags = 0; + bi.lpfn = setDefaultFolder; + bi.lParam = (LPARAM)def; + // \x83t\x83H\x83\x8B\x83_\x91I\x91\xF0\x83_\x83C\x83A\x83\x8D\x83O\x82̕\\x8E\xA6 + pidlBrowse = _SHBrowseForFolderW(&bi); + if (pidlBrowse != NULL) { + // PIDL\x8C`\x8E\xAE\x82̖߂\xE8\x92l\x82̃t\x83@\x83C\x83\x8B\x83V\x83X\x83e\x83\x80\x82̃p\x83X\x82ɕϊ\xB7 + if (_SHGetPathFromIDListW(pidlBrowse, buf)) { + // \x8E擾\x90\xAC\x8C\xF7 + wcsncpy_s(path, pathlen, buf, _TRUNCATE); + ret = TRUE; + } + // SHBrowseForFolder\x82̖߂\xE8\x92lPIDL\x82\xF0\x89\xF0\x95\xFA + CoTaskMemFree(pidlBrowse); + } + // \x83N\x83\x8A\x81[\x83\x93\x83A\x83b\x83v\x8F\x88\x97\x9D + CoTaskMemFree(pidlRoot); + + return ret; +} + /* vim: set ts=4 sw=4 ff=dos : */ Modified: branches/unicode_macro_2/teraterm/teraterm/addsetting.cpp =================================================================== --- branches/unicode_macro_2/teraterm/teraterm/addsetting.cpp 2020-03-27 15:48:19 UTC (rev 8643) +++ branches/unicode_macro_2/teraterm/teraterm/addsetting.cpp 2020-03-27 15:48:29 UTC (rev 8644) @@ -1422,15 +1422,15 @@ case IDC_DEFAULTPATH_PUSH | (BN_CLICKED << 16): // \x83\x8D\x83O\x83f\x83B\x83\x8C\x83N\x83g\x83\x8A\x82̑I\x91\xF0\x83_\x83C\x83A\x83\x8D\x83O - get_lang_msg("FILEDLG_SELECT_LOGDIR_TITLE", ts.UIMsg, sizeof(ts.UIMsg), - "Select log folder", ts.UILanguageFile); { - char buf[MAX_PATH]; - char buf2[MAX_PATH]; - GetDlgItemTextA(IDC_DEFAULTPATH_EDITOR, buf, sizeof(buf)); - if (doSelectFolder(GetSafeHwnd(), buf2, sizeof(buf2), buf, ts.UIMsg)) { - SetDlgItemTextA(IDC_DEFAULTPATH_EDITOR, buf2); + wchar_t *title = TTGetLangStrW("Tera Term", "FILEDLG_SELECT_LOGDIR_TITLE", L"Select log folder", ts.UILanguageFile); + wchar_t buf[MAX_PATH]; + wchar_t buf2[MAX_PATH]; + GetDlgItemTextW(IDC_DEFAULTPATH_EDITOR, buf, _countof(buf)); + if (doSelectFolderW(GetSafeHwnd(), buf2, _countof(buf2), buf, title)) { + SetDlgItemTextW(IDC_DEFAULTPATH_EDITOR, buf2); } + free(title); } return TRUE; @@ -1659,17 +1659,17 @@ BOOL CCygwinPropPageDlg::OnCommand(WPARAM wParam, LPARAM lParam) { - char buf[MAX_PATH], buf2[MAX_PATH]; + wchar_t buf[MAX_PATH], buf2[MAX_PATH]; switch (wParam) { case IDC_SELECT_FILE | (BN_CLICKED << 16): // Cygwin install \x83f\x83B\x83\x8C\x83N\x83g\x83\x8A\x82̑I\x91\xF0\x83_\x83C\x83A\x83\x8D\x83O - get_lang_msg("DIRDLG_CYGTERM_DIR_TITLE", ts.UIMsg, sizeof(ts.UIMsg), - "Select Cygwin directory", ts.UILanguageFile); - GetDlgItemTextA(IDC_CYGWIN_PATH, buf, sizeof(buf)); - if (doSelectFolder(GetSafeHwnd(), buf2, sizeof(buf2), buf, ts.UIMsg)) { - SetDlgItemTextA(IDC_CYGWIN_PATH, buf2); + wchar_t *title = TTGetLangStrW("Tera Term", "DIRDLG_CYGTERM_DIR_TITLE", L"Select Cygwin directory", ts.UILanguageFile); + GetDlgItemTextW(IDC_CYGWIN_PATH, buf, _countof(buf)); + if (doSelectFolderW(GetSafeHwnd(), buf2, _countof(buf2), buf, title)) { + SetDlgItemTextW(IDC_CYGWIN_PATH, buf2); } + free(title); return TRUE; } Modified: branches/unicode_macro_2/teraterm/ttpmacro/ttl_gui.cpp =================================================================== --- branches/unicode_macro_2/teraterm/ttpmacro/ttl_gui.cpp 2020-03-27 15:48:19 UTC (rev 8643) +++ branches/unicode_macro_2/teraterm/ttpmacro/ttl_gui.cpp 2020-03-27 15:48:29 UTC (rev 8644) @@ -422,9 +422,9 @@ if (CheckVar("inputstr", &ValType, &VarId) && (ValType == TypString)) { BringupWindow(GetHWND()); - TCHAR buf[MAX_PATH]; - if (doSelectFolderT(GetHWND(), buf, _countof(buf), tc::fromUtf8(InitDir), tc::fromUtf8(Title))) { - const char *bufU8 = ToU8T(buf); + wchar_t buf[MAX_PATH]; + if (doSelectFolderW(GetHWND(), buf, _countof(buf), wc::fromUtf8(InitDir), wc::fromUtf8(Title))) { + const char *bufU8 = ToU8W(buf); SetInputStr((PCHAR)bufU8); free((void *)bufU8); ret = 1;