gpt4 book ai didi

c++ - Win32 Edit 打印不正确的字符

转载 作者:可可西里 更新时间:2023-11-01 11:50:36 25 4
gpt4 key购买 nike

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

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

win32 编辑不是在 WindowProcedureWM_CREATE 句柄中创建的(因为它可能应该是),因为我无法将函数放入我的 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'显示文字:'??????????????我'

最佳答案

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

您调用 SendMessageW 但传递 ANSI 编码的文本。当您调用 SendMessageW 时,您 promise 发送 UTF-16 编码的文本。

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

关于c++ - Win32 Edit 打印不正确的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30889757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com