接受文件
第一步
Properties -> Behavior -> Accept Files -> True
第二步
子类化 ListControl 控件,并为 WM_DROPFILES 添加消息处理函数:ClassView->Messages->WM_DROPFILES
第三步
在 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 消息。
第三步
void CMyListCtrl::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(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);