• 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

  • 相关阅读:
    简单四则运算实现--第二次作业
    人生第一篇博客
    团队任务1:第一次团队会议
    第二次作业
    自我介绍
    五号团队—团队任务4:每日立会(2018-11-27)
    软件设计与开发准备
    原型设计与UI设计
    第一次团队会议
    课后作业2
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3120271.html
Copyright © 2020-2023  润新知