List Control 控件使用

接受文件

原创文章链接:https://www.cnblogs.com/xydblog/p/3475586.html

第一步

Properties -> Behavior -> Accept Files -> True

List Control 控件使用_第1张图片

第二步

子类化 ListControl 控件,并为 WM_DROPFILES 添加消息处理函数:ClassView->Messages->WM_DROPFILES

List Control 控件使用_第2张图片

第三步

在 OnDropFiles 函数中实现ListCtrl对拖放操作的响应:

void CMyListCtrl::OnDropFiles(HDROP hDropInfo)
{
    // TODO: Add your message handler code here and/or call default
    TCHAR szFilePathName[_MAX_PATH + 1] = { 0 };

    //得到文件个数      
    UINT nNumOfFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);

    for (UINT nIndex = 0; nIndex < nNumOfFiles; ++nIndex)
    {
        // 得到文件名   
        DragQueryFile(hDropInfo, nIndex, (LPTSTR)szFilePathName, _MAX_PATH);

        //获取ListCtrl已经存在的项数
        int nCnt = this->GetItemCount();

        //插入文本
        LVITEM lvi = { 0 };
        lvi.mask = LVIF_TEXT;
        lvi.iItem = nCnt;
        lvi.iSubItem = 0;
        lvi.pszText = szFilePathName;
        this->InsertItem(&lvi);
    }

    //完成拖放操作
    DragFinish(hDropInfo);

    CListCtrl::OnDropFiles(hDropInfo);
}

右键菜单

转载文章:http://blog.csdn.net/obuyiseng/article/details/49759413

第一步

在资源视图中的添加一个 MENU

第二步

给要添加右键菜单的ListCtrl子类,添加消息,按 ctrl + shift + x 打开类向导,选择要添加的子类,在消息中找到 =NM_RCLICK 消息。

List Control 控件使用_第3张图片

第三步

void CMyListCtrl::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);
    // TODO: Add your control notification handler code here
    *pResult = 0;


    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    if (pNMListView->iItem != -1)
    {
        DWORD dwPos = GetMessagePos();
        CPoint point(LOWORD(dwPos), HIWORD(dwPos));
        CMenu menu;
        //添加线程操作  
        VERIFY(menu.LoadMenu(LIST_MENU));           //这里是我们在1中定义的MENU的文件名称  
        CMenu* popup = menu.GetSubMenu(0);
        ASSERT(popup != NULL);
        popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);

        //下面的两行代码主要是为了后面的操作为准备的  
        //获取列表视图控件中第一个被选择项的位置    
        POSITION m_pstion = GetFirstSelectedItemPosition();

        //该函数获取由pos指定的列表项的索引,然后将pos设置为下一个位置的POSITION值  
        int m_nDeleteIndex = GetNextSelectedItem(m_pstion);
    }

}

控件内的 CheckBoxes 使用

全选

    for (int i = 0; i < m_CtrlList.GetItemCount(); i ++)
    {
        m_CtrlList.SetCheck(i);
    }

取消全选

    for (int i = 0; i < m_CtrlList.GetItemCount(); i ++)
    {
        m_CtrlList.SetCheck(i, FALSE);
    }

设置风格

    SetExtendedStyle(LVS_EX_FULLROWSELECT |
        LVS_EX_GRIDLINES | LVS_EX_CHECKBOXES);
  • 全行选中:LVS_EX_FULLROWSELECT
  • 显示网格: LVS_EX_GRIDLINES
  • 带勾选框:LVS_EX_CHECKBOXES

获得/删除某一行的值

得到第一行第一列的值

CString str = GetItemText(0, 0);

删除第一列的值

DeleteItem(0);

你可能感兴趣的:(mfc)