Vertical Scrollbar in CListCtrl

前端 未结 4 1516
忘了有多久
忘了有多久 2021-01-26 22:51

I\'m using a CListCtrl in Icon view, but it scrolls horizontally:

1 3 5 7 -->
2 4 6 8 -->

I\'d rather it scroll horizontally:

<         


        
4条回答
  •  清歌不尽
    2021-01-26 23:54

    On the Visual Studio dialog editor, make sure you have a "List Control," not a "List Box."

    On the Visual Studio dialog editor's property list, set "No Column Header" to True and "View" to Report. (Setting "Alignment" to Left has no effect in Report mode.)

    In OnInitDialog(), do the following (after calling your superclass's OnInitDialog()):

      CListCtrl* plistError = (CListCtrl*) GetDlgItem( IDC_ERROR );
      plistError->InsertColumn( 0, "" );
      plistError->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );
    

    In fact, that seems to give a maximum autosize of the initial width the control is created with. Strings are displayed truncated with an ellipsis at that point. Widening the window does not help.

    To correct that, add a method OnSize() to your CDialog subclass that again reminds the list that it's wider. (This assumes that widening the window is what would let the CListCtrl display more text. If you have some other means, such as a button, try this SetColumnWidth() call where you're doing that.)

     WinProgress::OnSize() {
        CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
        plist->SetColumnWidth( 0, LVSCW_AUTOSIZE_USEHEADER );
    

    You may then add new rows to the bottom of the list with code such as:

      CListCtrl* plist = (CListCtrl*) GetDlgItem( IDC_ERROR );
      int iCount = plist->GetItemCount();
    
      plist->InsertItem( iCount, "Next Item" );
    

    Items too wide for the list will show ellipses at first. When you resize the window however slightly, then the list items wide to full size and a horizontal scrollbar appears if necessary. It's not quite 10/10 as far as look and feel are concerned but even experienced GUI programmers probably won't notice.

提交回复
热议问题