码迷,mamicode.com
首页 > 其他好文 > 详细

Report List Controls

时间:2016-08-02 11:10:45      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:

Report风格的ListCtrl的扩展,原文链接地址:http://www.codeproject.com/Articles/5560/Another-Report-List-Control

1.列排序

BOOL IsSortable() const; // Is sort allowed?
BOOL SetSortable(BOOL bSet); // Allow/disallow sorting
BOOL IsSortAscending() const;
int GetSortedColumn() const;
// Sort a specified column.
void SortItems(int nColumn, BOOL bAscending);

A message WM_ITEM_SORTED is sent to the parent window after a sorting is completed, the column index is passed as wParam and sorting method is passed as lParam (0=descending, 1=ascending).

2.列中排序

单列中,按照每一部分排列,如separator一部分进行排列。

1)不用字符串进行排列:

m_wndList.SetSortSeparator(NULL); // Disable sort-separator
// Sort the first column in ascending order
m_wndList.SortItems(0, TRUE);

2)按照separator字符串进行排列:

// m_wndList.SetSortSeparator(NULL); // Disable sort-separator
// m_wndList.SortItems(0, TRUE); // Sort the first column in ascending order

// Use string "Separator" as the sort-separator
m_wndList.SetSortSeparator(_T("Separator")); 
// Sort the first column in ascending order
m_wndList.SortItems(0, TRUE);
  • 技术分享技术分享技术分享

  • 2)其他相关函数:

  • void SetSortSeparator(LPCTSTR lpSortSeparator);
    LPCTSTR GetSortSeparator() const;

    3.子项可编辑

  • BOOL IsEditable() const; // Is Item text editable?
    void SetEditable(BOOL bSet = TRUE); // Allow item text editting
    
    // Display the editbox, previous edit are committed
    BOOL StartEdit(int nItem, int nSubItem); 
    
    BOOL EndEdit(BOOL bCommit = TRUE); // Commit/cancel text edit, hide the editbox
    CEdit* GetEditControl();
  • 4.自定义框选

    void SetCheckboxeStyle(int nStyle = RC_CHKBOX_NORMAL); // Set checkbox styles.
    int GetCheckboxStyle() const;
    ----------------------------nStyle------------------------------------------------------------- 
    • RC_CHKBOX_NONE -- No checkbox displayed
    • RC_CHKBOX_NORMAL -- Normal style, multiple check marks allowed
    • RC_CHKBOX_SINGLE -- Single check only. Checkboxes are mutually exclusive, just like using radio buttons.
    • RC_CHKBOX_DISABLED -- Disabled, cannot be checked/unchecked by user input.
    // Example:
     
    // Make the checkbox read-only
    m_wndList.SetCheckboxeStyle(RC_CHKBOX_DISABLED);

    5.列图标、子项颜色、子项图标

    // Column header images
    BOOL SetHeaderImage(int nColumn, int nImageIndex, BOOL bLeftSide = TRUE);
    int GetHeaderImage(int nColumn) const;
    CImageList* SetHeaderImageList(UINT nBitmapID, COLORREF crMask = RGB(255, 0, 255));
    CImageList* SetHeaderImageList(CImageList* pImageList);
    // Sub-item images
    BOOL SetItemImage(int nItem, int nSubItem, int nImageIndex);
    int GetItemImage(int nItem, int nSubItem) const;
    CImageList* SetImageList(UINT nBitmapID, COLORREF crMask = RGB(255, 0, 255));
    CImageList* SetImageList(CImageList* pImageList);
    CImageList* GetImageList() const;
    // Sub-item Text & Background Color
    void SetItemTextColor(int nItem = -1, int nSubItem = -1, 
      COLORREF color = COLOR_INVALID, BOOL bRedraw = TRUE);
    COLORREF GetItemTextColor(int nItem, int nSubItem) const;
    void SetItemBkColor(int nItem = -1, int nSubItem = -1, 
      COLORREF color = COLOR_INVALID, BOOL bRedraw = TRUE);
    COLORREF GetItemBkColor(int nItem, int nSubItem) const;
    // Example: Set image and color for grid - 1st row 3rd column
    
    m_wndList.SetImageList(IDB_BITMAP1); // Using bitmap resource "IDB_BITMAP1"
    m_wndList.SetItemImage(0, 2, 0); // Set the 1st row 3rd column with image index 0
    
    // Set grid colors
    m_wndList.SetItemTextColor(0, 2, RGB(255, 0, 0), TRUE); // Grid text color: red
    m_wndList.SetItemBkColor(0, 2, RGB(0, 255, 0), TRUE); // Grid bkground color: green

    6.方便操作

    1)操作属性

    RC_ITEM_ALL - All items regardless of states
    RC_ITEM_SELECTED - Selected items
    RC_ITEM_UNSELECTED - Unselected items
    RC_ITEM_CHECKED - Checked items
    RC_ITEM_UNCHECKED - Unchecked items
    RC_ITEM_FOCUSED - Focused item
    RC_ITEM_UNFOCUSED - Unfocused items

    2)相关函数

    int GetFirstItem(DWORD dwStates = RC_ITEM_ALL, int nStartAfter = -1) const;
    int GetLastItem(DWORD dwStates = RC_ITEM_ALL, int nStartBefore = -1) const;
    int GetItemCount(DWORD dwStates = RC_ITEM_ALL) const; 
    DWORD GetItemStates(int nItem) const;
    BOOL ExamItemStates(int nItem, DWORD dwStates) const;
    BOOL SetItemStates(int nItem, DWORD dwNewStates);
    int SetAllItemStates(DWORD dwOldStates, DWORD dwNewStates);
    void InvertItems(int nType); // RC_INVERT_SELECTION or RC_INVERT_CHECKMARK

    3)example

    // Example:
    
    // Select all items which were unselected and unchecked
    m_wndList.SetAllItemStates(RC_ITEM_UNSELECTED | RC_ITEM_UNCHECKED, RC_ITEM_SELECTED);
    
    // How many items are not checked?
    int n = m_wndList.GetItemCount(RC_ITEM_UNCHECKED);
    
    //Unselect and check all items regardless of their previous states
    m_wndList.SetAllItemStates(RC_ITEM_ALL, RC_ITEM_UNSELECTED | RC_ITEM_CHECKED);
    
    // Delete all items which were selected and checked
    m_wndList.DeleteAllItems(RC_ITEM_SELECTED | RC_ITEM_CHECKED);

    7.方便定位

    int MoveUp(int nItem, int nCount = 1); // Move an item upwards by "nCount" positions.
    
    // Move an item downwards by "nCount" positions.
    int MoveDown(int nItem, int nCount = 1); 
    
    int MoveToTop(int nItem); // Move an item up to the top.
    int MoveToBottom(int nItem); // Move an item down to the bottom.
    int MoveTo(int nItem, int nNewPosition); // Move an item to a particular position 
    BOOL SwapItems(int nItem1, int nItem2); // Swap two items including all attributes.

    8.内容项操作

    BOOL SetItemText(int nItem, int nSubItem, INT val);
    BOOL SetItemText(int nItem, int nSubItem, UINT val);
    BOOL SetItemText(int nItem, int nSubItem, LONG val);
    BOOL SetItemText(int nItem, int nSubItem, ULONG val);
    BOOL SetItemText(int nItem, int nSubItem, TCHAR val);
    BOOL SetItemText(int nItem, int nSubItem, DOUBLE val, int nPrecision = -1);
    BOOL SetItemText(int nItem, int nSubItem, 
       const COleDateTime& dateTime, 
       DWORD dwFlags = 0);

    9.自适应

    void CMyView::OnSize(UINT nType, int cx, int cy) 
    {
        CFormView::OnSize(nType, cx, cy);
    
        // TODO: Add your message handler code here
        m_wndList.ResizeToFitParent(); // Add this line!
    }

    10.例子

    m_wndList.SetColumnHeader(_T("Student ID, 100; Enroll Date, 150; Score, 80, 2"));
    
        for (int i = 0; i < 10; i++)
        {
            const int IDX = m_wndList.InsertItem(0, _T(""));
            m_wndList.SetItemText(IDX, 0, rand() % 3000);
            m_wndList.SetItemText(IDX, 1, GenRandDate());
            m_wndList.SetItemText(IDX, 2, (rand() % 51) + 50);
            
            for (int j = 0; j < 2; j++)
                m_wndList.SetItemImage(IDX, j, rand() % 5); // subitem images
            
        }
    
        m_wndList.SetImageList(IDB_BITMAP1);
        m_wndList.SetHeaderImageList(IDB_BITMAP2);
        m_wndList.SetHeaderImage(0, 0);
        m_wndList.SetHeaderImage(1, 2, FALSE);
        m_wndList.SetHeaderImage(2, 1);
        m_wndList.SetGridLines(TRUE); // SHow grid lines
        m_wndList.SetCheckboxeStyle(RC_CHKBOX_NORMAL); // Enable checkboxes
        m_wndList.SetEditable(TRUE); // Allow sub-text edit
        m_wndList.SortItems(0, TRUE); // sort the 1st column, ascending
        m_bSortable = m_wndList.IsSortable();
        UpdateData(FALSE);
        GetDlgItem(IDC_ALLOWSORT)->EnableWindow(m_wndList.HasColumnHeader());
    
        // now play some colorful stuff
        
        // Set the 3rd column background color to yellow, text color to blue
        m_wndList.SetItemTextColor(-1, 2, RGB(0, 0, 0));
        m_wndList.SetItemBkColor(-1, 2, RGB(255, 255, 0));
    
        for (int n = 0; n < m_wndList.GetItemCount(); n++)
        {
            const int SCORE = _ttoi(m_wndList.GetItemText(n, 2)); // student score
    
            if (SCORE < 60)
            {
                m_wndList.SetItemBkColor(n, -1, ::GetSysColor(COLOR_INFOBK));
                m_wndList.SetItemTextColor(n, -1, RGB(255, 0, 0));
                
                m_wndList.SetItemBkColor(n, 2, RGB(255, 0, 0));
                m_wndList.SetItemTextColor(n, 2, RGB(255, 255, 255));
            }
            else if (SCORE > 90)
            {
                m_wndList.SetItemBkColor(n, -1, RGB(160, 255, 192));
                m_wndList.SetItemTextColor(n, -1, RGB(0, 0, 255));
    
                m_wndList.SetItemTextColor(n, 2, RGB(255, 255, 255));
                m_wndList.SetItemBkColor(n, 2, RGB(0, 160, 0));
            }
        }

    技术分享

    Report List Controls

    标签:

    原文地址:http://www.cnblogs.com/wuyuan2011woaini/p/5728318.html

    (0)
    (0)
       
    举报
    评论 一句话评论(0
    登录后才能评论!
    © 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
    迷上了代码!