首页 > 编程语言 > 详细

MFC实例:[4] List Control 控件实例

时间:2020-07-15 22:04:18      阅读:48      评论:0      收藏:0      [点我收藏+]

转自:https://blog.csdn.net/sunjikui1255326447/article/details/88916090  作者:

MFC实例:[4] List Control 控件实例
目录

1、List_control初始化代码如下:

2、左键单击选中事件

3、右键单击弹出菜单

4、菜单下删除事件响应

1、打开vs2017----》文件------》新建-------》项目,选择MFC 应用-------》基于对话框----》完成。
技术分享图片

2、Ctrl+shift+E打开资源视图,双击IDD_MFC_LIST_DIALOG,打开设计界面。

技术分享图片

3、删除所有控件按钮,打开工具箱(可以从视图中找),添加一个List Control控件,ID设置为IDC_PROGRAM_LANG_LIST,View属性设为Report,即为报表风格,Single Selection属性设为True。再添加一个静态文本控件和一个编辑框,静态文本控件的Caption属性设为“选择的语言:”,编辑框的ID设为IDC_LANG_SEL_EDIT,Read Only属性设为True。此时的对话框模板如下图:

技术分享图片

4、为列表视图控件IDC_PROGRAM_LANG_LIST添加变量为m_List。

步骤:选中List_Control 控件面板,右键单击----》添加变量------》名称m_List。点击完成

技术分享图片

5、添加初始化代码:

技术分享图片

List_control初始化代码如下:

// TODO: 在此添加额外的初始化代码    
    CRect rect;
 
    // 获取编程语言列表视图控件的位置和大小   
    m_List.GetClientRect(&rect);
 
    // 为列表视图控件添加全行选中和栅格风格   
    m_List.SetExtendedStyle(m_List.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
 
    // 为列表视图控件添加三列   
    m_List.InsertColumn(0, _T("语言"), LVCFMT_CENTER, rect.Width() / 3, 0);
    m_List.InsertColumn(1, _T("2019.02排名"), LVCFMT_CENTER, rect.Width() / 3, 1);
    m_List.InsertColumn(2, _T("2018.02排名"), LVCFMT_CENTER, rect.Width() / 3, 2);
 
    // 在列表视图控件中插入列表项,并设置列表子项文本   
    m_List.InsertItem(0, _T("Java"));
    m_List.SetItemText(0, 1, _T("1"));
    m_List.SetItemText(0, 2, _T("1"));
    m_List.InsertItem(1, _T("C"));
    m_List.SetItemText(1, 1, _T("2"));
    m_List.SetItemText(1, 2, _T("2"));
    m_List.InsertItem(2, _T("C#"));
    m_List.SetItemText(2, 1, _T("3"));
    m_List.SetItemText(2, 2, _T("6"));
    m_List.InsertItem(3, _T("C++"));
    m_List.SetItemText(3, 1, _T("4"));
    m_List.SetItemText(3, 2, _T("3"));

 

6、编译运行---》结果如下:

技术分享图片

7、接着将我们的选中的语言显示在下面的编译框中间。选中List_Control 控件面板,右键单击----》添加事件处理程序------》添家编辑。如下图。完成后,跳转到MFC_LISTDlg.cpp文件。

技术分享图片

8、程序自动添加代码如下:

技术分享图片

9、在这个函数的添加代码(该函数意思是当鼠标单击的消息处理)

左键单击选中事件

void CMFCLISTDlg::OnNMClickProgramLangList(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;
 
    CString strLangName;    // 选择语言的名称字符串   
    NMLISTVIEW *pNMListView = (NMLISTVIEW*)pNMHDR;
 
    if (-1 != pNMListView->iItem)        // 如果iItem不是-1,就说明有列表项被选择   
    {
        // 获取被选择列表项第一个子项的文本   
        strLangName = m_List.GetItemText(pNMListView->iItem, 0);
        // 将选择的语言显示与编辑框中   
        SetDlgItemText(IDC_LANG_SEL_EDIT, strLangName);
    }
    *pResult = 0;
}
//可以实现多行选中,左键双击
void COffLineDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
 
    POSITION ps;
    int nIndex;
 
    ps = m_listIP.GetFirstSelectedItemPosition();
    nIndex = m_listIP.GetNextSelectedItem(ps);
    //TODO:添加多选的操作。
    if (nIndex == -1)
    {
        //m_list.SetItemState(-1,LVNI_SELECTED,LVNI_SELECTED);
        MessageBox(_T("无效的客户端ID,请重新选择"));
        return;
 
    }
    m_listIP.SetItemState(nIndex, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
    CString str;
    str = m_listIP.GetItemText(nIndex, 0);
    MessageBox(str);
    str=str+m_list.GetItemText(nIndex,1); //所有的
 
    *pResult = 0;
}

10、运行程序后,如下图,单击每一行,会显示该行数据:

技术分享图片

11、但是呢,选中后,右键单击如何显示菜单呢?往下-----》选中List_Control 控件面板,右键单击----》添加事件处理程序------》添家编辑。如下图。完成后,跳转到MFC_LISTDlg.cpp文件

 技术分享图片

12、添加按钮---》,步骤如下:

技术分享图片

13、按钮设计如下:

技术分享图片

 

14、编写右键单击事件函数:(菜单响应)

右键单击弹出菜单

void CMFCLISTDlg::OnNMRClickProgramLangList(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    if (pNMListView->iItem != -1)
    {
 
        CPoint pt;
        GetCursorPos(&pt);
        CMenu menu;
        menu.LoadMenu(IDR_MENU1);
        CMenu *popmenu;
        popmenu = menu.GetSubMenu(0);
        popmenu->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
    }
 
    *pResult = 0;
}

15、运行效果如下:

技术分享图片

16、至于添加,删除等事件响应函数,请大家自行编写。

代码如下:

菜单下删除事件响应

// 删除代码
void CMFCLISTDlg::OnFile32772()
{
    // TODO: 在此添加命令处理程序代码
    int i, iState;
    int nItemSelected = m_List.GetSelectedCount();
    int nItemCount = m_List.GetItemCount();
    if (nItemSelected < 1)
        return;
    for (i = nItemCount - 1; i >= 0; i--)
    {
        iState = m_List.GetItemState(i, LVIS_SELECTED);
        if (iState != 0)
        {
 
            m_List.DeleteItem(i);
        }
    }
}

17、项目地址:

链接:https://pan.baidu.com/s/1Ja47MNGDF8bKfWOqYGJvQw 
提取码:0odm

补充:

1、在最后一行插入,并将焦点放置最后:

 int CountNum =m_list.GetItemCount();
        if (CountNum > 0)
            m_list.EnsureVisible(CountNum - 1, FALSE);
        m_list.InsertItem(CountNum, (pInfo->clientid));
        m_list.SetItemText(CountNum, 1,(m_Clientlist.GetItemText(i, 2).GetBuffer(0)));
        m_list.SetItemText(CountNum, 2, _T("上线"));
        m_list.SetItemText(CountNum , 3,(strTime.GetBuffer(0)));

 

MFC实例:[4] List Control 控件实例

原文:https://www.cnblogs.com/xmr183729/p/13307329.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!