[ttssh2-commit] [10831] TCP/IP設定ダイアログのホストリストをUnicode化した

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2023年 8月 12日 (土) 15:23:44 JST


Revision: 10831
          https://osdn.net/projects/ttssh2/scm/svn/commits/10831
Author:   zmatsuo
Date:     2023-08-12 15:23:43 +0900 (Sat, 12 Aug 2023)
Log Message:
-----------
TCP/IP設定ダイアログのホストリストをUnicode化した

Modified Paths:
--------------
    trunk/teraterm/common/dlglib.h
    trunk/teraterm/common/dlglib_cpp.cpp
    trunk/teraterm/ttpdlg/ttdlg.c

-------------- next part --------------
Modified: trunk/teraterm/common/dlglib.h
===================================================================
--- trunk/teraterm/common/dlglib.h	2023-08-11 14:35:48 UTC (rev 10830)
+++ trunk/teraterm/common/dlglib.h	2023-08-12 06:23:43 UTC (rev 10831)
@@ -98,6 +98,7 @@
 void SetComboBoxHostHistory(HWND dlg, int dlg_item, int maxhostlist, const wchar_t *SetupFNW);
 HICON TTLoadIcon(HINSTANCE hinst, const wchar_t *name, int cx, int cy, UINT dpi, BOOL notify);
 void TTSetIcon(HINSTANCE hInst, HWND hWnd, const wchar_t *icon_name, UINT dpi);
+DWORD GetDlgItemIndexTextW(HWND hDlg, int nIDDlgItem, WPARAM index, wchar_t **text);
 
 #ifdef __cplusplus
 }

Modified: trunk/teraterm/common/dlglib_cpp.cpp
===================================================================
--- trunk/teraterm/common/dlglib_cpp.cpp	2023-08-11 14:35:48 UTC (rev 10830)
+++ trunk/teraterm/common/dlglib_cpp.cpp	2023-08-12 06:23:43 UTC (rev 10831)
@@ -487,10 +487,27 @@
 }
 
 /**
- *	\x90ڑ\xB1\x82\xB5\x82\xBD\x83z\x83X\x83g\x97\x9A\x97\xF0\x82\xF0\x83R\x83\x93\x83{\x83{\x83b\x83N\x83X\x82ɃZ\x83b\x83g\x82\xB7\x82\xE9
+ *	\x90ڑ\xB1\x82\xB5\x82\xBD\x83z\x83X\x83g\x97\x9A\x97\xF0\x82\xF0\x83R\x83\x93\x83{\x83{\x83b\x83N\x83X\x82܂\xBD\x82̓\x8A\x83X\x83g\x83{\x83b\x83N\x83X\x82ɃZ\x83b\x83g\x82\xB7\x82\xE9
  */
 void SetComboBoxHostHistory(HWND dlg, int dlg_item, int maxhostlist, const wchar_t *SetupFNW)
 {
+	char class_name[32];
+	UINT message;
+	int r = GetClassNameA(GetDlgItem(dlg, dlg_item), class_name, _countof(class_name));
+	if (r == 0) {
+		return;
+	}
+	if (strcmp(class_name, "ComboBox") == 0) {
+		message = CB_ADDSTRING;
+	}
+	else if (strcmp(class_name, "ListBox") == 0) {
+		message = LB_ADDSTRING;
+	}
+	else {
+		assert(FALSE);
+		return;
+	}
+
 	int i = 1;
 	do {
 		wchar_t EntNameW[128];
@@ -498,8 +515,7 @@
 		_snwprintf_s(EntNameW, _countof(EntNameW), _TRUNCATE, L"host%d", i);
 		hGetPrivateProfileStringW(L"Hosts", EntNameW, L"", SetupFNW, &TempHostW);
 		if (TempHostW[0] != 0) {
-			SendDlgItemMessageW(dlg, dlg_item, CB_ADDSTRING,
-								0, (LPARAM) TempHostW);
+			SendDlgItemMessageW(dlg, dlg_item, message, 0, (LPARAM)TempHostW);
 		}
 		free(TempHostW);
 		i++;
@@ -554,3 +570,20 @@
 		}
 	}
 }
+
+/**
+ *	ListBox\x82ɃZ\x83b\x83g\x82\xB3\x82\xEA\x82Ă\xA2\x82镶\x8E\x9A\x97\xF1\x82\xF0\x8E擾\x82\xB7\x82\xE9
+ *	\x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7 free() \x82\xB7\x82邱\x82\xC6
+ *
+ *	@param[out]	text	\x90ݒ肳\x82\xEA\x82Ă\xA2\x82镶\x8E\x9A\x97\xF1
+ *						\x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7free()\x82\xB7\x82\xE9
+ *	@return	\x83G\x83\x89\x81[\x83R\x81[\x83h,0(=NO_ERROR)\x82̂Ƃ\xAB\x83G\x83\x89\x81[\x82Ȃ\xB5
+ */
+DWORD GetDlgItemIndexTextW(HWND hDlg, int nIDDlgItem, WPARAM index, wchar_t **text)
+{
+	LRESULT len = SendDlgItemMessageW(hDlg, nIDDlgItem, LB_GETTEXTLEN, index, 0);
+	wchar_t *str = (wchar_t *)malloc(sizeof(wchar_t) * (len + 1));
+	SendDlgItemMessageW(hDlg, nIDDlgItem, LB_GETTEXT, index, (LPARAM)str);
+	*text = str;
+	return NO_ERROR;
+}

Modified: trunk/teraterm/ttpdlg/ttdlg.c
===================================================================
--- trunk/teraterm/ttpdlg/ttdlg.c	2023-08-11 14:35:48 UTC (rev 10830)
+++ trunk/teraterm/ttpdlg/ttdlg.c	2023-08-12 06:23:43 UTC (rev 10831)
@@ -1347,6 +1347,36 @@
 	return FALSE;
 }
 
+/**
+ *	\x83R\x83\x93\x83{\x83{\x83b\x83N\x83X\x82̃z\x83X\x83g\x97\x9A\x97\xF0\x82\xF0\x83t\x83@\x83C\x83\x8B\x82ɏ\x91\x82\xAB\x8Fo\x82\xB7
+ */
+static void WriteComboBoxHostHistory(HWND dlg, int dlg_item, int maxhostlist, const wchar_t *SetupFNW)
+{
+	wchar_t EntNameW[10];
+	LRESULT Index;
+	int i;
+
+	WritePrivateProfileStringW(L"Hosts", NULL, NULL, SetupFNW);
+
+	Index = SendDlgItemMessageW(dlg, dlg_item, LB_GETCOUNT, 0, 0);
+	if (Index == LB_ERR) {
+		Index = 0;
+	}
+	else {
+		Index--;
+	}
+	if (Index > MAXHOSTLIST) {
+		Index = MAXHOSTLIST;
+	}
+	for (i = 1; i <= Index; i++) {
+		wchar_t *strW;
+		GetDlgItemIndexTextW(dlg, dlg_item, i - 1, &strW);
+		_snwprintf_s(EntNameW, _countof(EntNameW), _TRUNCATE, L"Host%i", i);
+		WritePrivateProfileStringW(L"Hosts", EntNameW, strW, SetupFNW);
+		free(strW);
+	}
+}
+
 static INT_PTR CALLBACK TCPIPDlg(HWND Dialog, UINT Message, WPARAM wParam, LPARAM lParam)
 {
 	static const DlgTextInfo TextInfos[] = {
@@ -1368,11 +1398,8 @@
 		{ IDC_TCPIPHELP, "BTN_HELP" },
 	};
 	PTTSet ts;
-	char EntName[10];
-	char TempHost[HostNameMaxLength+1];
 	UINT i, Index;
 	WORD w;
-	BOOL Ok;
 
 	switch (Message) {
 		case WM_INITDIALOG:
@@ -1384,21 +1411,10 @@
 			SendDlgItemMessage(Dialog, IDC_TCPIPHOST, EM_LIMITTEXT,
 			                   HostNameMaxLength-1, 0);
 
-			i = 1;
-			do {
-				_snprintf_s(EntName, sizeof(EntName), _TRUNCATE, "Host%d", i);
-				GetPrivateProfileString("Hosts",EntName,"",
-				                        TempHost,sizeof(TempHost),ts->SetupFName);
-				if (strlen(TempHost) > 0) {
-					SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_ADDSTRING,
-					                   0, (LPARAM)TempHost);
-				}
-				i++;
-			} while (i <= MAXHOSTLIST);
+			SetComboBoxHostHistory(Dialog, IDC_TCPIPLIST, MAXHOSTLIST, ts->SetupFNameW);
 
 			/* append a blank item to the bottom */
-			TempHost[0] = 0;
-			SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_ADDSTRING, 0, (LPARAM)TempHost);
+			SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_ADDSTRING, 0, 0);
 			SetRB(Dialog,ts->HistoryList,IDC_TCPIPHISTORY,IDC_TCPIPHISTORY);
 			SetRB(Dialog,ts->AutoWinClose,IDC_TCPIPAUTOCLOSE,IDC_TCPIPAUTOCLOSE);
 			SetDlgItemInt(Dialog,IDC_TCPIPPORT,ts->TCPPort,FALSE);
@@ -1416,41 +1432,25 @@
 
 		case WM_COMMAND:
 			switch (LOWORD(wParam)) {
-				case IDOK:
+				case IDOK: {
+					BOOL Ok;
+
 					ts = (PTTSet)GetWindowLongPtr(Dialog,DWLP_USER);
-					if (ts!=NULL) {
-						WritePrivateProfileString("Hosts",NULL,NULL,ts->SetupFName);
-
-						Index = SendDlgItemMessage(Dialog,IDC_TCPIPLIST,LB_GETCOUNT,0,0);
-						if (Index==(UINT)LB_ERR) {
-							Index = 0;
-						}
-						else {
-							Index--;
-						}
-						if (Index>MAXHOSTLIST) {
-							Index = MAXHOSTLIST;
-						}
-						for (i = 1 ; i <= Index ; i++) {
-							SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_GETTEXT,
-							                   i-1, (LPARAM)TempHost);
-							_snprintf_s(EntName, sizeof(EntName), _TRUNCATE, "Host%i", i);
-							WritePrivateProfileString("Hosts",EntName,TempHost,ts->SetupFName);
-						}
-						GetRB(Dialog,&ts->HistoryList,IDC_TCPIPHISTORY,IDC_TCPIPHISTORY);
-						GetRB(Dialog,&ts->AutoWinClose,IDC_TCPIPAUTOCLOSE,IDC_TCPIPAUTOCLOSE);
-						ts->TCPPort = GetDlgItemInt(Dialog,IDC_TCPIPPORT,&Ok,FALSE);
-						if (! Ok) {
-							ts->TCPPort = ts->TelPort;
-						}
-						ts->TelKeepAliveInterval = GetDlgItemInt(Dialog,IDC_TCPIPTELNETKEEPALIVE,&Ok,FALSE);
-						GetRB(Dialog,&ts->Telnet,IDC_TCPIPTELNET,IDC_TCPIPTELNET);
-						GetDlgItemText(Dialog, IDC_TCPIPTERMTYPE, ts->TermType,
-						               sizeof(ts->TermType));
+					assert(ts!=NULL);
+					WriteComboBoxHostHistory(Dialog, IDC_TCPIPLIST, MAXHOSTLIST, ts->SetupFNameW);
+					GetRB(Dialog,&ts->HistoryList,IDC_TCPIPHISTORY,IDC_TCPIPHISTORY);
+					GetRB(Dialog,&ts->AutoWinClose,IDC_TCPIPAUTOCLOSE,IDC_TCPIPAUTOCLOSE);
+					ts->TCPPort = GetDlgItemInt(Dialog,IDC_TCPIPPORT,&Ok,FALSE);
+					if (! Ok) {
+						ts->TCPPort = ts->TelPort;
 					}
+					ts->TelKeepAliveInterval = GetDlgItemInt(Dialog,IDC_TCPIPTELNETKEEPALIVE,&Ok,FALSE);
+					GetRB(Dialog,&ts->Telnet,IDC_TCPIPTELNET,IDC_TCPIPTELNET);
+					GetDlgItemText(Dialog, IDC_TCPIPTERMTYPE, ts->TermType,
+								   sizeof(ts->TermType));
 					EndDialog(Dialog, 1);
 					return TRUE;
-
+				}
 				case IDCANCEL:
 					EndDialog(Dialog, 0);
 					return TRUE;
@@ -1457,32 +1457,36 @@
 
 				case IDC_TCPIPHOST:
 					if (HIWORD(wParam)==EN_CHANGE) {
-						GetDlgItemText(Dialog, IDC_TCPIPHOST, TempHost, sizeof(TempHost));
-						if (strlen(TempHost)==0) {
+						wchar_t *host;
+						hGetDlgItemTextW(Dialog, IDC_TCPIPHOST, &host);
+						if (wcslen(host)==0) {
 							DisableDlgItem(Dialog,IDC_TCPIPADD,IDC_TCPIPADD);
 						}
 						else {
 							EnableDlgItem(Dialog,IDC_TCPIPADD,IDC_TCPIPADD);
 						}
+						free(host);
 					}
 					break;
 
-				case IDC_TCPIPADD:
-					GetDlgItemText(Dialog, IDC_TCPIPHOST, TempHost, sizeof(TempHost));
-					if (strlen(TempHost)>0) {
+				case IDC_TCPIPADD: {
+					wchar_t *host;
+					hGetDlgItemTextW(Dialog, IDC_TCPIPHOST, &host);
+					if (wcslen(host) > 0) {
 						Index = SendDlgItemMessage(Dialog,IDC_TCPIPLIST,LB_GETCURSEL,0,0);
 						if (Index==(UINT)LB_ERR) {
 							Index = 0;
 						}
 
-						SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_INSERTSTRING,
-						                   Index, (LPARAM)TempHost);
+						SendDlgItemMessageW(Dialog, IDC_TCPIPLIST, LB_INSERTSTRING,
+						                   Index, (LPARAM)host);
 
 						SetDlgItemText(Dialog, IDC_TCPIPHOST, 0);
 						SetFocus(GetDlgItem(Dialog, IDC_TCPIPHOST));
 					}
+					free(host);
 					break;
-
+				}
 				case IDC_TCPIPLIST:
 					if (HIWORD(wParam)==LBN_SELCHANGE) {
 						i = SendDlgItemMessage(Dialog,IDC_TCPIPLIST,LB_GETCOUNT,0,0);
@@ -1509,7 +1513,8 @@
 					break;
 
 				case IDC_TCPIPUP:
-				case IDC_TCPIPDOWN:
+				case IDC_TCPIPDOWN: {
+					wchar_t *host;
 					i = SendDlgItemMessage(Dialog,IDC_TCPIPLIST,LB_GETCOUNT,0,0);
 					Index = SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_GETCURSEL, 0, 0);
 					if (Index==(UINT)LB_ERR) {
@@ -1521,12 +1526,12 @@
 					if ((Index==0) || (Index>=i-1)) {
 						return TRUE;
 					}
-					SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_GETTEXT,
-					                   Index, (LPARAM)TempHost);
+					GetDlgItemIndexTextW(Dialog, IDC_TCPIPLIST, Index, &host);
 					SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_DELETESTRING,
 					                   Index, 0);
-					SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_INSERTSTRING,
-					                   Index-1, (LPARAM)TempHost);
+					SendDlgItemMessageW(Dialog, IDC_TCPIPLIST, LB_INSERTSTRING,
+					                   Index-1, (LPARAM)host);
+					free(host);
 					if (LOWORD(wParam)==IDC_TCPIPUP) {
 						Index--;
 					}
@@ -1545,8 +1550,10 @@
 					}
 					SetFocus(GetDlgItem(Dialog, IDC_TCPIPLIST));
 					break;
+				}
 
-				case IDC_TCPIPREMOVE:
+				case IDC_TCPIPREMOVE: {
+					wchar_t *host;
 					i = SendDlgItemMessage(Dialog,IDC_TCPIPLIST,LB_GETCOUNT,0,0);
 					Index = SendDlgItemMessage(Dialog,IDC_TCPIPLIST,LB_GETCURSEL, 0, 0);
 					if ((Index==(UINT)LB_ERR) ||
@@ -1553,14 +1560,15 @@
 						(Index==i-1)) {
 						return TRUE;
 					}
-					SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_GETTEXT,
-					                   Index, (LPARAM)TempHost);
+					GetDlgItemIndexTextW(Dialog, IDC_TCPIPLIST, Index, &host);
 					SendDlgItemMessage(Dialog, IDC_TCPIPLIST, LB_DELETESTRING,
 					                   Index, 0);
-					SetDlgItemText(Dialog, IDC_TCPIPHOST, TempHost);
+					SetDlgItemTextW(Dialog, IDC_TCPIPHOST, host);
 					DisableDlgItem(Dialog,IDC_TCPIPUP,IDC_TCPIPDOWN);
 					SetFocus(GetDlgItem(Dialog, IDC_TCPIPHOST));
+					free(host);
 					break;
+				}
 
 				case IDC_TCPIPTELNET:
 					GetRB(Dialog,&w,IDC_TCPIPTELNET,IDC_TCPIPTELNET);


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