如何从文本文件中检索unicode文本?

时间:2017-11-08 18:11:15

标签: c++ winapi unicode

我的可执行二进制文件中嵌入了一个文本文件,所以我想在运行时阅读内容:

在标头文件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");

为什么上面有效但从文本文件加载文本时无法正确打印?

0 个答案:

没有答案