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);