2012-08-12 5 views
1

가로 스크롤 막대를 비활성화하려는 목록보기가 있습니다.목록보기에서 가로 스크롤 막대 사용 안 함

기본적으로 내 데이터가 단일 열의 너비를 초과하지 않는다는 것을 알고 있지만 충분한 항목이 목록보기에 추가되면 수직 스크롤 막대가 튀어 나와 사용 가능한 너비가 줄어들고 가로 스크롤 막대가 나타납니다 쪽으로.

세로 스크롤 막대가 추가되기 전에 메시지를 잡는 방법을 생각한 다음 충분한 공간을 만들기 위해 열의 크기를 조정하는 방법을 생각했지만 어떤 메시지를 잡아야하는지 알지 못합니다. 이.

편집 :
사람이 삭제 목록보기에서 항목 후 보낸 메시지가 있는지 알고 있나요? LVN_ITEMCHANGED은 항목을 추가 한 후에 전송 된 것으로 보입니다. 그리고 항목이 삭제되기 전에 LVN_DELETEITEM.

+0

왜 당신은 단지 제한된 마지막 열의 너비를 유지하지 않는 LVSCW_AUTOSIZE_USEHEADER 수 있나요? 그럼 당신은 확실히 수평 스크롤 막대가 나타나지 않을 것입니다 ... – demorge

+0

난 단 하나의 열을 가지고 있기 때문에 열 구분 기호가 추한 보인다. 여러 가지 이유로 보고서 모드에 있어야합니다. – Josh

+0

'LVM_ISITEMVISIBLE'을 사용하여 첫 번째 항목 또는 마지막 항목이 표시되지 않을 수도 있습니다. 그런 다음 열 너비를 줄여야합니다. 그리고 항목을 추가하거나 크기를 조정할 때마다 확인하십시오. – demorge

답변

1

글쎄 나는 한 가지 해결책을 찾아 냈다.
버그가 있습니다. 항목 하나만 제거하면 열의 크기가 조정되지 않습니다.

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; 
} 

나는 더 나은 해결책을보고 싶지만, 지금은 효과가 있습니다. 당신은 메시지를 보낼 수

+0

WS_VSCROLL이 변경 될 때마다 WM_STYLECHANGED 메시지를보고 열의 크기를 조정할 수도 있습니다. 그러나 열의 수동 크기 조정과 관련된 방법은 없다고 생각합니다. –

1

: LVM_SETCOLUMNWIDTH 메세지를 CX의 PARAM 세트 목록보기에