1

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] 

文字列の末尾にある Carat を使用すると、次の出力が生成されます。

文字列「未定義」選択 [3,3]、ユニコード? 間違い

一体何が起こっているのでしょうか?私は小さなテストアプリケーションを構築しましたが、それは期待通りに動作し、出力を生成します

文字列「未定義」選択 [6,6]、ユニコード? 間違い

これは としてビルドされた MBCSsizeof(TCHAR) == 1であり、レガシー アプリケーションであるため UNICODE に切り替えることはできません。

4

0 に答える 0