글쎄 나는 한 가지 해결책을 찾아 냈다.
버그가 있습니다. 항목 하나만 제거하면 열의 크기가 조정되지 않습니다.
case LVN_DELETEITEM:
{
LPNMLISTVIEW listView = (LPNMLISTVIEW) lParam;
// After an item is deleted,
// if there is not a vertical scroll bar and GWL_USERDATA is TRUE,
// resize the column back to normal.
if (!(GetWindowLong(listView->hdr.hwndFrom, GWL_STYLE) & WS_VSCROLL) &&
GetWindowLong(listView->hdr.hwndFrom, GWL_USERDATA) == TRUE)
{
const int ColWidth = ListView_GetColumnWidth(listView->hdr.hwndFrom, 0);
ListView_SetColumnWidth(listView->hdr.hwndFrom, 0, ColWidth + GetSystemMetrics(SM_CXVSCROLL));
SetWindowLong(listView->hdr.hwndFrom, GWL_USERDATA, FALSE);
}
break;
}
case LVN_ITEMCHANGED:
{
LPNMLISTVIEW listView = (LPNMLISTVIEW) lParam;
// After an item is added, if there is a horizontal scrollbar,
// resize the column and set GWL_USERDATA to TRUE.
if (GetWindowLong(listView->hdr.hwndFrom, GWL_STYLE) & WS_HSCROLL)
{
const int ColWidth = ListView_GetColumnWidth(listView->hdr.hwndFrom, 0);
ListView_SetColumnWidth(listView->hdr.hwndFrom, 0, ColWidth - GetSystemMetrics(SM_CXVSCROLL));
SetWindowLong(listView->hdr.hwndFrom, GWL_USERDATA, TRUE);
}
break;
}
나는 더 나은 해결책을보고 싶지만, 지금은 효과가 있습니다. 당신은 메시지를 보낼 수
왜 당신은 단지 제한된 마지막 열의 너비를 유지하지 않는 LVSCW_AUTOSIZE_USEHEADER 수 있나요? 그럼 당신은 확실히 수평 스크롤 막대가 나타나지 않을 것입니다 ... – demorge
난 단 하나의 열을 가지고 있기 때문에 열 구분 기호가 추한 보인다. 여러 가지 이유로 보고서 모드에 있어야합니다. – Josh
'LVM_ISITEMVISIBLE'을 사용하여 첫 번째 항목 또는 마지막 항목이 표시되지 않을 수도 있습니다. 그런 다음 열 너비를 줄여야합니다. 그리고 항목을 추가하거나 크기를 조정할 때마다 확인하십시오. – demorge