在unicode中使用getline

用wfstream即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用如下代码实现: ```c++ #include <iostream> #include <fstream> #include <string> #include <vector> #include <Windows.h> #include <CommCtrl.h> #pragma comment(lib, "comctl32.lib") using namespace std; int main() { // 初始化控件 INITCOMMONCONTROLSEX icex; icex.dwSize = sizeof(INITCOMMONCONTROLSEX); icex.dwICC = ICC_LISTVIEW_CLASSES; InitCommonControlsEx(&icex); // 创建listctrl控件 HWND hList = CreateWindow(WC_LISTVIEW, L"", WS_VISIBLE | WS_BORDER | WS_CHILD | LVS_REPORT | LVS_EDITLABELS, 10, 10, 500, 300, NULL, NULL, NULL, NULL); // 设置listctrl控件的列 LVCOLUMN lvCol; lvCol.mask = LVCF_TEXT | LVCF_WIDTH; lvCol.cx = 100; lvCol.pszText = L"列1"; ListView_InsertColumn(hList, 0, &lvCol); lvCol.cx = 150; lvCol.pszText = L"列2"; ListView_InsertColumn(hList, 1, &lvCol); lvCol.cx = 100; lvCol.pszText = L"列3"; ListView_InsertColumn(hList, 2, &lvCol); lvCol.cx = 150; lvCol.pszText = L"列4"; ListView_InsertColumn(hList, 3, &lvCol); // 读取文件并分割 wifstream ifs("test.txt"); ifs.imbue(locale("chs")); wstring line; vector<wstring> v; while (getline(ifs, line)) { wstring delimiters = L" \t"; size_t start = 0; size_t end = line.find_first_of(delimiters); while (end != wstring::npos) { if (start != end) { wstring token = line.substr(start, end - start); v.push_back(token); } start = end + 1; end = line.find_first_of(delimiters, start); } if (start != line.length()) { wstring token = line.substr(start); v.push_back(token); } } // 显示到listctrl控件 int row = 0; LVITEM lvItem; lvItem.mask = LVIF_TEXT; for (size_t i = 0; i < v.size(); i += 4) { lvItem.iItem = row; lvItem.iSubItem = 0; lvItem.pszText = (LPWSTR)v[i].c_str(); ListView_InsertItem(hList, &lvItem); lvItem.iSubItem = 1; lvItem.pszText = (LPWSTR)v[i + 1].c_str(); ListView_SetItem(hList, &lvItem); lvItem.iSubItem = 2; lvItem.pszText = (LPWSTR)v[i + 2].c_str(); ListView_SetItem(hList, &lvItem); lvItem.iSubItem = 3; lvItem.pszText = (LPWSTR)v[i + 3].c_str(); ListView_SetItem(hList, &lvItem); row++; } // 消息循环 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } ``` 需要注意的几点是: 1. 使用`wifstream`和`wstring`读取和存储文件内容,以支持Unicode编码。 2. 使用`locale("chs")`设置文本地化环境,以避免文乱码。 3. 将分割后的内容存储在`vector<wstring>`,并根据需要每四个元素为一行。 4. 使用Windows API的`CreateWindow`和`ListView_InsertColumn`创建和设置listctrl控件的列。 5. 使用Windows API的`ListView_InsertItem`和`ListView_SetItem`将内容显示到listctrl控件,其`LVITEM`结构体的`pszText`需要转换为`LPWSTR`类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值