在Win32 API ListView中添加带换行符的文本

Exa*_*Exa 0 c++ winapi

我正在使用WC_LISTVIEW控件创建一个在运行时填充数据的表.桌子工作正常.但是,我无法在一个单元格中显示多行.

有没有办法使用换行符(例如\n)?

这是我创建表的方式:

HWND listViewErrors = CreateWindow(WC_LISTVIEW, L"",
    WS_VISIBLE | WS_BORDER | WS_CHILD | LVS_REPORT | LVS_SINGLESEL,
    17, 27, errorsRect.Width() - 12, errorsRect.Height() - 25,
    GetWindowHandle(), (HMENU)ID_LIST_ERRORS, NULL, 0);
Run Code Online (Sandbox Code Playgroud)

我添加这样的行:

LVITEM lvi = { 0 };

lvi.mask = LVIF_TEXT;
lvi.pszText = L"Label of an entry";

int ret = ListView_InsertItem(hwndList, &lvi); // Main item

if (ret >= 0)
{
    ListView_SetItemText(
            hwndList,
            ret,
            1,
            L"A description containing\nline breaks, but the\nline breaks will be\nignored."); // Sub item
}

return ret;
Run Code Online (Sandbox Code Playgroud)

结果是换行符(\n)不再可见,但文本仍然在一行中.

在此输入图像描述

xMR*_*MRi 6

只要您不使用自定义绘图或所有者绘制,LISTVIEW窗口就不会支持报告模式中的多行条目.

即使使用自定义绘制或所有者绘制时,所有行都将具有相同的高度.