[Ttssh2-commit] [8644] フォルダ選択ダイアログを Unicode版に置き換え

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 3月 28日 (土) 00:48:30 JST


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;


Ttssh2-commit メーリングリストの案内
Back to archive index