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

原文地址:https://www.cnblogs.com/MakeView660/p/6840601.html