那麼我制定了一個解決方案。
雖然有一個錯誤,如果我只刪除一個項目,它不會調整列的大小。
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;
}
我仍然很想看到更好的解決方案,但是現在可以使用。
爲什麼你不只是不停的最後一列的寬度有限?那麼你肯定知道水平滾動條不會顯示出來...... – demorge 2012-08-12 18:36:45
因爲我只有一個列,並且列分隔符看起來很醜。出於多種原因,它必須處於報告模式。 – Josh 2012-08-12 18:39:39
也許你可以使用'LVM_ISITEMVISIBLE'來檢查第一個OR最後一項是否不可見。那麼你應該減少列的寬度。並檢查每次添加項目或調整大小。 – demorge 2012-08-12 18:44:40