VS2010 MFC中 List Contorl 控件的使用

实现的功能:在单选列表视图控件中显示一个简单的编程语言排行榜,然后在用鼠标左键选择某列表项时,将选中列表项的文本显示到编辑框中。下面是具体实现步骤:

       1. 创建一个基于对话框的MFC工程,名称设置为“Example29”。

       2. 在自动生成的对话框模板IDD_EXAMPLE29_DIALOG中,删除“TODO: Place dialog controls here.”静态文本控件、“OK”按钮和“Cancel”按钮。添加一个List Control控件,ID设置为IDC_PROGRAM_LANG_LIST,View属性设为Report,即为报表风格,Single Selection属性设为True。再添加一个静态文本控件和一个编辑框,静态文本控件的Caption属性设为“选择的语言:”,编辑框的ID设为 IDC_LANG_SEL_EDIT,Read Only属性设为True。

       3. 为列表视图控件IDC_PROGRAM_LANG_LIST添加CListCtrl类型的控件变量m_programLangList。

       4. 在对话框初始化时,我们将编程语言排行榜加入到列表视图控件中,那么需要修改CExample29Dlg::OnInitDialog()函数为:

    BOOL CExample29Dlg::OnInitDialog()   
    {   
        CDialogEx::OnInitDialog();   
      
        // Add "About..." menu item to system menu.   
      
        // IDM_ABOUTBOX must be in the system command range.   
        ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);   
        ASSERT(IDM_ABOUTBOX < 0xF000);   
      
        CMenu* pSysMenu = GetSystemMenu(FALSE);   
        if (pSysMenu != NULL)   
        {   
            BOOL bNameValid;   
            CString strAboutMenu;   
            bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);   
            ASSERT(bNameValid);   
            if (!strAboutMenu.IsEmpty())   
            {   
                pSysMenu->AppendMenu(MF_SEPARATOR);   
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);   
            }   
        }   
      
        // Set the icon for this dialog.  The framework does this automatically   
        //  when the application's main window is not a dialog   
        SetIcon(m_hIcon, TRUE);         // Set big icon   
        SetIcon(m_hIcon, FALSE);        // Set small icon   
      
        // TODO: Add extra initialization here   
        CRect rect;   
      
        // 获取编程语言列表视图控件的位置和大小   
        m_programLangList.GetClientRect(&rect);   
      
        // 为列表视图控件添加全行选中和栅格风格   
        m_programLangList.SetExtendedStyle(m_programLangList.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);   
      
        // 为列表视图控件添加三列   
        m_programLangList.InsertColumn(0, _T("语言"), LVCFMT_CENTER, rect.Width()/3, 0);   
        m_programLangList.InsertColumn(1, _T("2012.02排名"), LVCFMT_CENTER, rect.Width()/3, 1);   
        m_programLangList.InsertColumn(2, _T("2011.02排名"), LVCFMT_CENTER, rect.Width()/3, 2);   
      
        // 在列表视图控件中插入列表项,并设置列表子项文本   
        m_programLangList.InsertItem(0, _T("Java"));   
        m_programLangList.SetItemText(0, 1, _T("1"));   
        m_programLangList.SetItemText(0, 2, _T("1"));   
        m_programLangList.InsertItem(1, _T("C"));   
        m_programLangList.SetItemText(1, 1, _T("2"));   
        m_programLangList.SetItemText(1, 2, _T("2"));   
        m_programLangList.InsertItem(2, _T("C#"));   
        m_programLangList.SetItemText(2, 1, _T("3"));   
        m_programLangList.SetItemText(2, 2, _T("6"));   
        m_programLangList.InsertItem(3, _T("C++"));   
        m_programLangList.SetItemText(3, 1, _T("4"));   
        m_programLangList.SetItemText(3, 2, _T("3"));   
      
        return TRUE;  // return TRUE  unless you set the focus to a control   
    }  

    5. 我们希望在选中列表项改变时,将最新的选择项实时显示到编辑框中,那么可以使用NM_CLICK通知消息。为列表框IDC_PROGRAM_LANG_LIST的通知消息NM_CLICK添加消息处理函数CExample29Dlg::OnNMClickProgramLangList,并修改如下:

    void CExample29Dlg::OnNMClickProgramLangList(NMHDR *pNMHDR, LRESULT *pResult)   
    {   
        LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);   
        // TODO: Add your control notification handler code here   
        *pResult = 0;   
      
        CString strLangName;    // 选择语言的名称字符串   
        NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR;   
      
        if (-1 != pNMListView->iItem)        // 如果iItem不是-1,就说明有列表项被选择   
        {   
            // 获取被选择列表项第一个子项的文本   
            strLangName = m_programLangList.GetItemText(pNMListView->iItem, 0);   
            // 将选择的语言显示与编辑框中   
            SetDlgItemText(IDC_LANG_SEL_EDIT, strLangName);   
        }   
    }  

6. 运行程序,弹出结果对话框,在对话框的列表框中用鼠标改变选中项时,编辑框中的显示会相应改变。

     效果图如下:

资料来源:http://www.jizhuomi.com/software/197.html

原文地址:https://www.cnblogs.com/lxt287994374/p/3120271.html