mfc使用CListCtrl添加右键菜单及双击(以默认方式)打开文件。

继续做c++文件管理的项目,总结一下。 仅做笔记,如有侵权联系删除。
1.CListCtrl添加响应函数很简单。在属性中选择控件事件-NM_DBLCLICK即可。
    如何简单的以默认方式打开文件呢?这里用到了一个ShellExecute函数,他的功能是运行一个外部程序。
函数原型及参数含义如下
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;
    第三个参数及要打开的内容,也可直接打开网址,邮箱等。
void CDocumentManagementDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMLISTVIEW pNMLV = reinterpret_cast (pNMHDR);
	int nItem=pNMLV->iItem;//行号 
	//pNMLV->iSubItem;//列号 
	if (nItem >= 0 && nItem
2.右键菜单同样是选择控件事件-NM_RCLICK。
    新建资源中添加一个MENU,编辑一下显示内容,选择添加事件处理可添加点击事件。

mfc使用CListCtrl添加右键菜单及双击(以默认方式)打开文件。_第1张图片

void CDocumentManagementDlg::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR);
	int nItem = pNMItemActivate->iItem;
	if (m_list.GetSelectedCount() <= 0)
		return;//判断右键是否有内容
	fileinformation.Init(info[nItem].szDisplayName, strFolderPath, info[nItem].hIcon);
	//传值,定义了一个FileInformatica类,用于储存被右击信息
	CMenu menu;
	POINT pt = { 0 };
	GetCursorPos(&pt);//得到鼠标点击位置 
	menu.LoadMenu(IDR_MENU1);//加载菜单资源ID 
	menu.GetSubMenu(0)->TrackPopupMenu(0, pt.x, pt.y, this); //最后一个参数为this才可以响应点击事件 
	*pResult = 0;
}

3.如何在菜单中响应问题1.中打开文件函数呢。将获取点击位置的函数替换为m_list.GetSelectionMark()即可。

void CDocumentManagementDlg::On32771()
{
	int nItem = m_list.GetSelectionMark();
	if (nItem >= 0 && nItem
这个问题研究了挺长时间,因为我想着可以把两个事件绑定,使其响应同一函数,但参数不同。最后被 大神点醒,改变获取方式即可。



你可能感兴趣的:(mfc,文件管理,mfc,文件管理)