我正在使用 MBCS 维护一个大型遗留应用程序构建。
在使用日语作为系统区域设置和英语作为 UI 区域设置的 Windows 7 系统上,我遇到了一个问题,即编辑控件的选择位置返回不正确。我在日本安装的 XP 和 Windows 7 上进行了测试,结果相同。
[codesnippet]
CEdit* pEdit = state->GetEdit() ;
auto hWnd = pEdit->GetSafeHwnd() ;
if ( hWnd )
{
::SendMessageA(hWnd, EM_GETSEL, (WPARAM)&nStart, (LPARAM)&nEnd) ;
TCHAR buffer[128];
::SendMessageA(hWnd, WM_GETTEXT, (WPARAM)_countof(buffer), (LPARAM)&buffer);
_RPT4(_CRT_WARN,
"String '%s' selection [%d,%d], unicode? %s",
buffer,
nStart,
nEnd,
(::IsWindowUnicode(hWnd)) ? "True" : "False");
[/codesnippet]
在字符串末尾使用克拉,这会产生输出
字符串'未定义'选择[3,3],unicode?错误的
到底会发生什么?我已经构建了一个小测试应用程序,它可以像我期望的那样工作,产生输出
字符串'未定义'选择[6,6],unicode?错误的
它是一个 MBCS 版本sizeof(TCHAR) == 1
,我无法切换到 UNICODE,因为它是一个遗留应用程序。