EDIT控制在什么情况下将MBCS视为UNICODE?

时间:2013-08-21 06:25:24

标签: winapi mfc mbcs

我正在使用MBCS维护大型遗留应用程序构建。

在Windows 7系统上,日语作为系统区域设置,英语作为UI区域设置我遇到了错误地返回编辑控件的选择位置的问题。我已经在日本安装的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] 

在字符串末尾的Carat处产生输出

字符串'未定义'选择[3,3],unicode?错误

到底是怎么回事?我已经构建了一个小测试应用程序,并且正如我期望的那样生成输出

字符串'未定义'选择[6,6],unicode?假

它是一个MBCS构建为sizeof(TCHAR) == 1,我无法切换到UNICODE,因为它是一个遗留应用程序。

0 个答案:

没有答案