Win32 Edit 打印不正确的字符

Win32 Edit printing incorrect characters

我正在使用 Win32 编辑器来显示调试信息,我已将编辑器连同我的基本 GUI 的其余部分放在 class 中。但是,当我向编辑输出任何内容时,它会显示“????????????????????????????”。我认为错误出在我的 MyGUI::append(LPCSTR) 方法上,尽管它在过去一直运行良好。任何 comments/ideas/solutions 将不胜感激。如果我需要 post 所有与我的 GUI 有关的代码 class 请告诉我。

我的 class 位于命名空间 Interface 中,连同独立的 WindowProcedure 函数,我在使用 WNDCLASSEX 对象注册应用程序时调用它。

win32 编辑未在 WindowProcedure 中的 WM_CREATE 句柄中创建(因为它可能应该是),因为我无法将函数放入我的 GUI class。

创建编辑的方法:

HWND createEdit( HINSTANCE hInst, HWND hwnd, int appBott, int appTop ){
    return CreateWindowEx(  WS_EX_APPWINDOW,
                            TEXT("EDIT"), TEXT(""),
                            WS_BORDER | WS_CHILD | WS_VISIBLE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | ES_MULTILINE| WS_VSCROLL | WS_HSCROLL,
                            10, 10, appBott-25, appTop-50,
                            hwnd,
                            (HMENU) 102,
                            hInst,
                            NULL );
}

在 'guiCreate()' 方法中使用如下: HWND hEdit = createEdit( hInst, hWin, appWidth, appHeight );

在编辑中显示文本的方法:

void Interface::MyGUI::append( LPCSTR text ){
    if( created && !stopAll ){
        int TextLen = SendMessage(hEdit, WM_GETTEXTLENGTH, 0, 0);
        SendMessageW(hEdit, EM_SETSEL, (WPARAM)TextLen, (LPARAM)TextLen);
        SendMessageW(hEdit, EM_REPLACESEL, FALSE, (LPARAM) text);
    }
}

在主程序中用作:

MyGUI form(); //initialize form
form.append( (LPCSTR)"Example text\n" );

输入文字:'Example text.\n' 显示文字:'??????????????我'

您似乎以 ANSI 为目标。在那种情况下,不要调用 SendMessageW,调用 SendMessageA 甚至 SendMessage 并将其扩展为 SendMessageA.

您调用 SendMessageW 但传递的是 ANSI 编码文本。当您致电 SendMessageW 时,您承诺发送 UTF-16 编码的文本。

但是,我认为您应该停止以 ANSI 为目标。而是以 Unicode 为目标。停止使用 TEXT() 宏并为字符串文字使用 L 前缀。并停止转换字符串类型。 (LPCSTR) 演员是在自找麻烦。当你这样转换时,你告诉编译器你比它更了解。通常情况并非如此。