Revision: 9150 https://osdn.net/projects/ttssh2/scm/svn/commits/9150 Author: zmatsuo Date: 2021-02-11 00:10:28 +0900 (Thu, 11 Feb 2021) Log Message: ----------- 9x系のときの入力キーUnicode変換を見直し - vtwin.cpp, tekwin.cpp の2ファイル - ヘルプメッセージのハンドリングを修正(tekwin.cpp) - 変数の定義を移動(vtwin.cpp) Modified Paths: -------------- trunk/teraterm/teraterm/tekwin.cpp trunk/teraterm/teraterm/vtwin.cpp -------------- next part -------------- Modified: trunk/teraterm/teraterm/tekwin.cpp =================================================================== --- trunk/teraterm/teraterm/tekwin.cpp 2021-02-10 15:10:11 UTC (rev 9149) +++ trunk/teraterm/teraterm/tekwin.cpp 2021-02-10 15:10:28 UTC (rev 9150) @@ -45,8 +45,8 @@ #include "ttlib.h" #include <htmlhelp.h> #include "dlglib.h" -#include <tchar.h> #include "layer_for_unicode.h" +#include "codeconv.h" #define TEKClassName L"TEKWin32" @@ -250,24 +250,43 @@ } } +/** + * \x83L\x81[\x83{\x81[\x83h\x82\xA9\x82\xE71\x95\xB6\x8E\x9A\x93\xFC\x97\xCD + * @param nChar UTF-16 char(wchar_t) IsWindowUnicode() == TRUE \x8E\x9E + * ANSI char(char) IsWindowUnicode() == FALSE \x8E\x9E + */ void CTEKWindow::OnChar(WPARAM nChar, UINT nRepCnt, UINT nFlags) { - unsigned int i; - char Code; if (!KeybEnabled || (TalkStatus!=IdTalkKeyb)) { return; } - Code = nChar; + wchar_t u16; + if (IsWindowUnicode(HTEKWin) == TRUE) { + // \x93\xFC\x97͂\xCD UTF-16 + u16 = (wchar_t)nChar; + } else { + // \x93\xFC\x97͂\xCD ANSI + // ANSI(ACP) -> UTF-32 -> UTF-16 + const char mb_str[2] = {(char)nChar, 0}; + unsigned int u32; + size_t mb_len = MBCPToUTF32(mb_str, 1, CP_ACP, &u32); + if (mb_len == 0) { + return; + } + u16 = (wchar_t)u32; + } + if (tk.GIN) { - TEKReportGIN(&tk,&ts,&cv,Code); + char Code = (char)nChar; + TEKReportGIN(&tk, &ts, &cv, Code); } else { - for (i=1 ; i<=nRepCnt ; i++) { - CommTextOut(&cv,&Code,1); - if (ts.LocalEcho>0) { - CommTextEcho(&cv,&Code,1); + for (unsigned int i = 1; i <= nRepCnt; i++) { + CommTextOutW(&cv, &u16, 1); + if (ts.LocalEcho > 0) { + CommTextEchoW(&cv, &u16, 1); } } } @@ -636,7 +655,7 @@ LRESULT CTEKWindow::OnDlgHelp(WPARAM wParam, LPARAM lParam) { DWORD help_id = (wParam == 0) ? HelpId : (DWORD)wParam; - OpenHelp(HH_HELP_CONTEXT, HelpId, ts.UILanguageFile); + OpenHelp(HH_HELP_CONTEXT, help_id, ts.UILanguageFile); return 0; } @@ -906,6 +925,6 @@ retval = DefWindowProc(msg, wp, lp); break; } - + return retval; } Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2021-02-10 15:10:11 UTC (rev 9149) +++ trunk/teraterm/teraterm/vtwin.cpp 2021-02-10 15:10:28 UTC (rev 9150) @@ -1452,20 +1452,15 @@ // \x93\xFC\x97͂\xCD UTF-16 u16 = (wchar_t)nChar; } else { - // \x93\xFC\x97͂\xCD ANSI, ANSI(ACP) -> UTF-32 -> UTF-16 - char mb_str[1]; + // \x93\xFC\x97͂\xCD ANSI + // ANSI(ACP) -> UTF-32 -> UTF-16 + const char mb_str[2] = {(char)nChar, 0}; unsigned int u32; - mb_str[0] = (char)nChar; - size_t u32_len = MBCPToUTF32(mb_str, 1, CP_ACP, &u32); - if (u32_len == 0) { + size_t mb_len = MBCPToUTF32(mb_str, 1, CP_ACP, &u32); + if (mb_len == 0) { return; } - wchar_t u16_str[2]; - size_t u16_len = UTF32ToUTF16(u32, u16_str, _countof(u16_str)); - if (u16_len == 0) { - return; - } - u16 = u16_str[0]; + u16 = (wchar_t)u32; } // \x83o\x83b\x83t\x83@\x82֏o\x97́A\x89\xE6\x96ʂ֏o\x97\xCD @@ -1947,9 +1942,6 @@ void CVTWindow::OnKeyDown(WPARAM nChar, UINT nRepCnt, UINT nFlags) { - BYTE KeyState[256]; - MSG M; - #if UNICODE_DEBUG if (UnicodeDebugParam.CodePopupEnable) { @@ -2012,11 +2004,14 @@ if (MetaKey(ts.MetaKey) && (nFlags & 0x2000) != 0) { + BYTE KeyState[256]; + MSG M; + PeekMessage((LPMSG)&M,HVTWin,WM_CHAR,WM_CHAR,PM_REMOVE); /* for Ctrl+Alt+Key combination */ - GetKeyboardState((PBYTE)KeyState); + GetKeyboardState(KeyState); KeyState[VK_MENU] = 0; - SetKeyboardState((PBYTE)KeyState); + SetKeyboardState(KeyState); M.hwnd = HVTWin; M.message = WM_KEYDOWN; M.wParam = nChar;