我正在使用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'
答案 0 :(得分:2)
您的目标是ANSI。在这种情况下,请不要致电SendMessageW
,致电SendMessageA
甚至SendMessage
,然后将其扩展为SendMessageA
。
您调用SendMessageW
但传递ANSI编码文本。当您致电SendMessageW
时,您答应发送UTF-16编码文本。
但是,我应该停止以ANSI为目标。改为使用目标Unicode。停止使用TEXT()
宏并使用L
前缀作为字符串文字。并停止投射字符串类型。那个(LPCSTR)
演员要求麻烦。当你这样投射时,你告诉编译器你比它知道的更好。通常情况并非如此。