[Ttssh2-commit] [9150] 9x系のときの入力キーUnicode変換を見直し

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2021年 2月 11日 (木) 00:10:28 JST


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;


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