我正在使用Win32编辑来显示调试信息,并将该编辑以及其他基本GUI放在了一个类中。但是,当我向编辑输出任何内容时,它会显示“ ?????????????????????????????”。我认为错误出在我的MyGUI::append(LPCSTR)
方法上,尽管它在过去一直运行良好。任何意见/想法/解决方案将不胜感激。如果我需要发布与我的GUI类有关的所有代码,请告诉我。
我的类位于命名空间中Interface
,还有独立WindowProcedure
函数,当我向WNDCLASSEX
对象注册应用程序时会调用它。
由于无法在我的GUI类中放置函数,因此未WM_CREATE
在WindowProcedure
(可能应该如此)的句柄中创建win32编辑。
创建编辑的方法:
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”显示文字:“ ?????????????? 我
您的目标似乎是ANSI。在这种情况下,请勿致电SendMessageW
,致电SendMessageA
甚至,SendMessage
而应将其扩展为SendMessageA
。
您调用,SendMessageW
但传递ANSI编码的文本。打电话时,SendMessageW
您承诺会发送UTF-16编码的文本。
但是,您应该停止针对ANSI的定位。改为目标Unicode。停止使用TEXT()
宏,并在L
字符串文字中使用前缀。并停止转换字符串类型。那位(LPCSTR)
演员自找麻烦。当您像这样进行转换时,您会告诉编译器您比它了解的更多。通常情况并非如此。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句