Win32编辑打印不正确的字符

时间:2015-06-17 11:05:54

标签: c++ windows api winapi

我正在使用Win32编辑来显示调试信息,我已将编辑以及其他基本GUI放在一个类中。但当我输出任何内容到编辑时,它会显示'?????????????????????????我认为错误在于我的MyGUI::append(LPCSTR)方法,尽管它在过去一直都很完美。任何意见/想法/解决方案将不胜感激。如果我需要发布与我的GUI类相关的所有代码,请告诉我。

我的类位于命名空间Interface,以及独立的WindowProcedure函数,我在使用WNDCLASSEX对象注册应用程序时调用该函数。

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

创建编辑的方法:

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" );

输入文字:'示例文字。\ n' 显示的文字:'?????????????? L'

1 个答案:

答案 0 :(得分:2)

您的目标是ANSI。在这种情况下,请不要致电SendMessageW,致电SendMessageA甚至SendMessage,然后将其扩展为SendMessageA

您调用SendMessageW但传递ANSI编码文本。当您致电SendMessageW时,您答应发送UTF-16编码文本。

但是,我应该停止以ANSI为目标。改为使用目标Unicode。停止使用TEXT()宏并使用L前缀作为字符串文字。并停止投射字符串类型。那个(LPCSTR)演员要求麻烦。当你这样投射时,你告诉编译器你比它知道的更好。通常情况并非如此。