C++ 为什么LVSCW_AUTOSIZE_USEHEADER会拉伸我的第一列以匹配listview控件的宽度';宽度是多少?

C++ 为什么LVSCW_AUTOSIZE_USEHEADER会拉伸我的第一列以匹配listview控件的宽度';宽度是多少?,c++,listview,winapi,C++,Listview,Winapi,我正在使用Comctl32.dll的列表视图控件,并尝试将其宽度划分为10列,自动调整大小以匹配各自标题中的字符串。我将ListView_SetColumnWidth宏与LVSCW_AUTOSIZE_USEHEADER值一起使用,它处理除第一列以外的所有列: 以下是我认为相关的代码,但如果还不够,请告诉我: HWND hListView; hListView = CreateWindowEx( WS_EX_CLIENTEDGE,

我正在使用Comctl32.dll的列表视图控件,并尝试将其宽度划分为10列,自动调整大小以匹配各自标题中的字符串。我将ListView_SetColumnWidth宏与LVSCW_AUTOSIZE_USEHEADER值一起使用,它处理除第一列以外的所有列:

以下是我认为相关的代码,但如果还不够,请告诉我:

HWND hListView;
        hListView = CreateWindowEx(
            WS_EX_CLIENTEDGE,
            WC_LISTVIEW,
            L"",
            WS_CHILD | WS_VISIBLE |
            LVS_REPORT,
            200, 10, 800, 150,
            hwnd,
            (HMENU)IDC_MAIN_LV,
            GetModuleHandle(NULL),
            NULL);
        if (hListView == NULL) {
            MessageBox(hwnd, L"Could not create list box.", L"Error!", MB_OK | MB_ICONERROR);
        }

        LVCOLUMN lvc; 
        WCHAR buffer[256];
        lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;

        for (int col = 0; col < C_COLUMNS; col++) {     

            lvc.iSubItem = col;
            lvc.pszText = buffer;
            lvc.cx = 100;
            lvc.fmt = LVCFMT_CENTER;

            LoadString(
                GetModuleHandle(NULL),
                IDS_HP + col,
                buffer,
                sizeof(buffer));

            if (ListView_InsertColumn(hListView, col, &lvc) == -1) {
                MessageBox(hwnd, L"Could not create list box.", L"Error!", MB_OK | MB_ICONERROR);
            }
            ListView_SetColumnWidth(hListView, col, LVSCW_AUTOSIZE_USEHEADER);
        }

        SetFocus(hListBox);
HWND-hListView;
hListView=CreateWindowEx(
前客户,
WC_列表视图,
L“,
WS|u CHILD | WS|u可见|
LVS_报告,
200, 10, 800, 150,
hwnd,
(汉努)IDC_MAIN_LV,
GetModuleHandle(空),
无效);
if(hListView==NULL){
MessageBox(hwnd,L“无法创建列表框”,L“错误!”,MB_确定| MB_icon);
}
lvc柱;
WCHAR缓冲区[256];
lvc.mask=LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_子项;
对于(int col=0;col
这是我学习C++基础知识后的第一个项目,所以我确信我做的每件事情都是最糟糕的。(:具体地说,我想知道是什么导致了这个特殊的错误。感谢阅读!

文档:

LVSCW\u自动调整大小\u使用标题

自动调整列的大小以适合标题文本。如果将此值用于最后一列,则其宽度设置为填充列表视图控件的剩余宽度

当您第一次使用它时,只有一列,因此它是最后一列,因此被调整为listview的全宽

解决方案是先添加所有列,然后自动调整它们的大小

for (int col = 0; col < C_COLUMNS; col++) {     
    lvc.iSubItem = col;
    lvc.pszText = buffer;
    lvc.cx = 100;
    lvc.fmt = LVCFMT_CENTER;

    LoadString(
        GetModuleHandle(NULL),
        IDS_HP + col,
        buffer,
        sizeof(buffer));

    ListView_InsertColumn(hListView, col, &lvc);
}
for (int col = 0; col < C_COLUMNS; col++) {     
   ListView_SetColumnWidth(hListView, col, LVSCW_AUTOSIZE_USEHEADER);
}
for(int col=0;col
来自文档:

LVSCW\u自动调整大小\u使用标题

自动调整列的大小以适合标题文本。如果将此值用于最后一列,则其宽度设置为填充列表视图控件的剩余宽度

当您第一次使用它时,只有一列,因此它是最后一列,因此被调整为listview的全宽

解决方案是先添加所有列,然后自动调整它们的大小

for (int col = 0; col < C_COLUMNS; col++) {     
    lvc.iSubItem = col;
    lvc.pszText = buffer;
    lvc.cx = 100;
    lvc.fmt = LVCFMT_CENTER;

    LoadString(
        GetModuleHandle(NULL),
        IDS_HP + col,
        buffer,
        sizeof(buffer));

    ListView_InsertColumn(hListView, col, &lvc);
}
for (int col = 0; col < C_COLUMNS; col++) {     
   ListView_SetColumnWidth(hListView, col, LVSCW_AUTOSIZE_USEHEADER);
}
for(int col=0;col
我明白了!伙计,我甚至注意到了你两天前引用的同一章节,但我把它放在一边,因为我确信它不适用于我的问题。谢谢你的帮助!我明白了!伙计,我甚至注意到了你两天前引用的同一章节,但我把它放在一边,因为我确信它不适用于我的问题。谢谢你的帮助救命啊!