我的可执行二进制文件中嵌入了一个文本文件,所以我想在运行时阅读内容:
在标头文件myres.h
中:
#define UNICODE
#define _UNICODE
#define MY_RESOURCE 1000
在资源文件myres.rc
中:
#include "myres.h"
MY_RESOURCE RT_RCDATA L"Help Topics.txt"
现在在DialogBox的WinMain.cpp
中,WM_INITDIALOG加载内容并将其设置为编辑控件:
case WM_INITDIALOG:{
HGLOBAL res_handle = NULL;
HRSRC res;
wchar_t* res_data;
DWORD res_size;
res = FindResourceW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(MY_RESOURCE), (LPWSTR)RT_RCDATA);
if (!res)
return 1;
res_handle = LoadResource(NULL, res);
if (!res_handle)
return 2;
res_data = (wchar_t*)LockResource(res_handle);
res_size = SizeofResource(NULL, res);
SendDlgItemMessageW(hWnd, ID_HELP_CONTENT, WM_SETTEXT, 0, (LPARAM)res_data);
return TRUE;
}
break;
现在,当创建对话框时,它会使用不可读的字符(例如中文字符)填充编辑控件。
注意如果我使用ANSI版本加载内容并取消定义UNICODE代码工作正常但我需要UNICODE。
UTF-8 BOM
。有办法解决吗? - 有些人建议我使用MultiByteToWideChar()
,但我不知道为什么以及怎么做?
如果是这样,为什么其他控件我可以发送UNICODE文本并从中检索它而不需要任何其他东西,例如:
SendDlgItemMessageW(hWnd, ID_HELP_CONTENT, WM_SETTEXT, 0, (LPARAM)L"Chinese/arabic/latin... text here");
为什么上面有效但从文本文件加载文本时无法正确打印?