Win32编辑打印不正确的字符

我正在使用Win32编辑来显示debugging信息,而且我已经将编辑以及我的基本GUI的其余部分放在一个类中。 但是,当我输出任何东西的编辑它显示'??????????????????????????'。 我认为错误在于我的MyGUI::append(LPCSTR)方法,尽pipe它在过去一直很完美。 任何意见/想法/解决scheme将不胜感激。 如果我需要发布有关我的GUI类的所有代码,请让我知道。

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

win32编辑不是在WindowProcedureWM_CREATE句柄中创build的(因为它可能应该是这样),因为我不能将该函数放在我的GUI类中。

创build编辑的方法:

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

input文字:'示例文字。\ n'显示文字:'?????????????? L”

你的目标是ANSI。 在这种情况下,不要调用SendMessageW ,调用SendMessageA甚至SendMessage并将其扩展为SendMessageA

您调用SendMessageW但通过ANSI编码的文本。 当您调用SendMessageW您承诺发送UTF-16编码的文本。

但是,你应该停止瞄准ANSI我认为。 目标Unicode代替。 停止使用TEXT()宏并为字符串文字使用L前缀。 并停止投射字符串类型。 那(LPCSTR)演员正在惹麻烦。 当你像这样施放时,你告诉编译器,你知道比它更好。 通常情况并非如此。