zoukankan      html  css  js  c++  java
  • VC++ ListCtrl Report使用

      1、在VC++ 6.0中新建基于对话框的MFC应用程序ListCtrl;

      2、在主对话框上添加一个List Control至合适的位置及大小;

      

      3、在对话框OnInitDialog中初始化ListCtrl,代码如下:

        // 设置ListCtrl的风格及扩展风格
        LONG lStyle;
        lStyle = GetWindowLong(m_ctlListCtrl.m_hWnd, GWL_STYLE);
        lStyle &= ~LVS_TYPEMASK; 
        lStyle |= LVS_REPORT; 
        SetWindowLong(m_ctlListCtrl.m_hWnd, GWL_STYLE, lStyle);
        
        DWORD dwStyle = m_ctlListCtrl.GetExtendedStyle();
        dwStyle |= LVS_EX_FULLROWSELECT;                                        //选中某行使整行高亮(LVS_REPORT)
        dwStyle |= LVS_EX_GRIDLINES;                                            //网格线(LVS_REPORT)
        dwStyle |= LVS_EX_CHECKBOXES;                                            //CheckBox
        m_ctlListCtrl.SetExtendedStyle(dwStyle); 
    
        // 向ListCtrl插入数据
        m_ctlListCtrl.InsertColumn( 0, _T("No."), LVCFMT_LEFT, 40);
        m_ctlListCtrl.InsertColumn( 1, _T("Name"), LVCFMT_LEFT, 120 );
        m_ctlListCtrl.InsertColumn( 2, _T("Address"), LVCFMT_LEFT, 170);
        m_ctlListCtrl.InsertColumn( 3, _T("Score"), LVCFMT_LEFT, 50);
        int nRowIndex = 0;
        m_ctlListCtrl.InsertItem(nRowIndex, _T("01"));
        m_ctlListCtrl.SetItemText(nRowIndex, 1, _T("Michael Jordan"));
        m_ctlListCtrl.SetItemText(nRowIndex, 2, _T("Brooklyn,New York "));
        m_ctlListCtrl.SetItemText(nRowIndex, 3, _T("99"));
        nRowIndex++;
        m_ctlListCtrl.InsertItem(nRowIndex, _T("02"));
        m_ctlListCtrl.SetItemText(nRowIndex, 1, _T("Lebron James"));
        m_ctlListCtrl.SetItemText(nRowIndex, 2, _T("Akron,Ohio"));
        m_ctlListCtrl.SetItemText(nRowIndex, 3, _T("98"));
        nRowIndex++;
        m_ctlListCtrl.InsertItem(nRowIndex, _T("03"));
        m_ctlListCtrl.SetItemText(nRowIndex, 1, _T("Kobe Bryant"));
        m_ctlListCtrl.SetItemText(nRowIndex, 2, _T("Philadelphia,Pennsylvania"));
        m_ctlListCtrl.SetItemText(nRowIndex, 3, _T("97"));
        nRowIndex++;
        m_ctlListCtrl.InsertItem(nRowIndex, _T("04"));
        m_ctlListCtrl.SetItemText(nRowIndex, 1, _T("James Harden"));
        m_ctlListCtrl.SetItemText(nRowIndex, 2, _T("Los Angeles,California"));
        m_ctlListCtrl.SetItemText(nRowIndex, 3, _T("96"));
        nRowIndex++;
        m_ctlListCtrl.InsertItem(nRowIndex, _T("05"));
        m_ctlListCtrl.SetItemText(nRowIndex, 1, _T("Russell Westbrook"));
        m_ctlListCtrl.SetItemText(nRowIndex, 2, _T("Long Beach,CA"));
        m_ctlListCtrl.SetItemText(nRowIndex, 3, _T("95"));

      4、添加消息响应

      // Generated message map functions
      //{{AFX_MSG(CListCtrlDlg)
      virtual BOOL OnInitDialog();
      afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
      afx_msg void OnPaint();
      afx_msg HCURSOR OnQueryDragIcon();
      afx_msg void OnClickListDemo(NMHDR* pNMHDR, LRESULT* pResult);
      afx_msg void OnCustomDrawListDemo(NMHDR* pNMHDR, LRESULT* pResult);
      afx_msg void OnItemChangedListDemo(NMHDR* pNMHDR, LRESULT* pResult);
      //}}AFX_MSG
      DECLARE_MESSAGE_MAP()



      BEGIN_MESSAGE_MAP(CListCtrlDlg, CDialog)
        //{{AFX_MSG_MAP(CListCtrlDlg)
        ON_WM_SYSCOMMAND()
        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_NOTIFY(NM_CLICK, IDC_LIST_DEMO, OnClickListDemo)
        ON_NOTIFY(NM_CUSTOMDRAW, IDC_LIST_DEMO, OnCustomDrawListDemo)
        ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_DEMO, OnItemChangedListDemo)
        //}}AFX_MSG_MAP
      END_MESSAGE_MAP()



    void
    CListCtrlDlg::OnClickListDemo(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->iItem != -1) { int i = pNMListView->iItem; int nCheckState = 0; if( m_ctlListCtrl.GetItemState(i, m_ctlListCtrl.GetCheck(i))) { nCheckState = 1; } CString strtemp; strtemp.Format(_T("Row = %d, Column = %d CheckState = %d"), pNMListView->iItem, pNMListView->iSubItem, nCheckState); AfxMessageBox(strtemp); } *pResult = 0; } void CListCtrlDlg::OnCustomDrawListDemo( NMHDR* pNMHDR, LRESULT* pResult ) { NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>(pNMHDR); *pResult = 0; if(CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage) { *pResult = CDRF_NOTIFYITEMDRAW; } else if(CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage) { //奇数行 if(pLVCD->nmcd.dwItemSpec % 2) pLVCD->clrTextBk = RGB(255, 255, 128); //偶数行 else pLVCD->clrTextBk = RGB(128, 255, 255); //继续 *pResult = CDRF_DODEFAULT; } } void CListCtrlDlg::OnItemChangedListDemo(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; // TODO: Add your control notification handler code here CString sTemp; if((pNMListView->uOldState & LVIS_FOCUSED) == LVIS_FOCUSED && (pNMListView->uNewState & LVIS_FOCUSED) == 0) { sTemp.Format(_T("%d losted focus"), pNMListView->iItem); } else if((pNMListView->uOldState & LVIS_FOCUSED) == 0 && (pNMListView->uNewState & LVIS_FOCUSED) == LVIS_FOCUSED) { sTemp.Format(_T("%d got focus"), pNMListView->iItem); } if((pNMListView->uOldState & LVIS_SELECTED) == LVIS_SELECTED && (pNMListView->uNewState & LVIS_SELECTED) == 0) { sTemp.Format(_T("%d losted selected"), pNMListView->iItem); } else if((pNMListView->uOldState & LVIS_SELECTED) == 0 && (pNMListView->uNewState & LVIS_SELECTED) == LVIS_SELECTED) { sTemp.Format(_T("%d got selected"), pNMListView->iItem); } if (!sTemp.IsEmpty()) { AfxMessageBox(sTemp); } *pResult = 0; }

      BOOL CListCtrlDlg::PreTranslateMessage(MSG* pMsg)
      {
        // Ctrl + A 全选
        if( (pMsg->hwnd == GetDlgItem(IDC_LIST_DEMO)->GetSafeHwnd()))
        {
          if(pMsg->message == WM_KEYDOWN)
          {
            switch (pMsg->wParam)
            {
            case 'A':
              if (::GetKeyState(VK_CONTROL) < 0)
              {
                for (int i=0;i < m_ctlListCtrl.GetItemCount();i++)
                {
                  m_ctlListCtrl.SetItemState(i, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
                }
              }
              return TRUE;
            }
          }
        }
        return CDialog::PreTranslateMessage(pMsg);
      }

     

      5、编译运行

      

      参考:http://www.cppblog.com/finehai/archive/2009/09/17/96574.html

  • 相关阅读:
    数学系列:数学在计算机图形学中的应用
    数学系列:数学体系概览
    Math: Fibonacci
    算法系列:电磁频谱划分
    计算机系列:CUDA 深入研究
    算法系列:寻找最大的 K 个数
    算法系列:000
    算法系列:三元组和
    算法系列:单链表逆序
    堆栈区别
  • 原文地址:https://www.cnblogs.com/MakeView660/p/6840601.html
Copyright © 2011-2022 走看看