mfc使用CListCtrl添加右键菜单及双击(以默认方式)打开文件。
2018-03-15 15:55
1006 查看
继续做c++文件管理的项目,总结一下。仅做笔记,如有侵权联系删除。1.CListCtrl添加响应函数很简单。在属性中选择控件事件-NM_DBLCLICK即可。 如何简单的以默认方式打开文件呢?这里用到了一个ShellExecute函数,他的功能是运行一个外部程序。
void CDocumentManagementDlg::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(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<m_list.GetItemCount())//判断双击内容是否存在
{
CString OpenFile = strFolderPath + info[nItem].szDisplayName;
if (PathFileExists(OpenFile))
ShellExecute(NULL, TEXT("OPEN"), OpenFile, NULL, NULL, SW_SHOWNORMAL);
}
}这个问题研究了挺长时间,因为我想着可以把两个事件绑定,使其响应同一函数,但参数不同。最后被大神点醒,改变获取方式即可。
函数原型及参数含义如下 function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;第三个参数及要打开的内容,也可直接打开网址,邮箱等。
void CDocumentManagementDlg::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast <LPNMLISTVIEW>(pNMHDR); int nItem=pNMLV->iItem;//行号 //pNMLV->iSubItem;//列号 if (nItem >= 0 && nItem<m_list.GetItemCount())//判断双击内容是否存在 { CString OpenFile = strFolderPath+info[nItem].szDisplayName; if (PathFileExists(OpenFile)) ShellExecute(NULL, TEXT("OPEN"), OpenFile, NULL, NULL, SW_SHOWNORMAL); //第三个参数为需要打开文件的路径及文件名 } *pResult = 0; }2.右键菜单同样是选择控件事件-NM_RCLICK。 新建资源中添加一个MENU,编辑一下显示内容,选择添加事件处理可添加点击事件。
void CDocumentManagementDlg::OnNMRClickList1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(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<m_list.GetItemCount())//判断双击内容是否存在
{
CString OpenFile = strFolderPath + info[nItem].szDisplayName;
if (PathFileExists(OpenFile))
ShellExecute(NULL, TEXT("OPEN"), OpenFile, NULL, NULL, SW_SHOWNORMAL);
}
}这个问题研究了挺长时间,因为我想着可以把两个事件绑定,使其响应同一函数,但参数不同。最后被大神点醒,改变获取方式即可。
相关文章推荐
- 使用Python为程序添加右键菜单打开方式
- VSCode 绿色版(zip压缩包) 添加右键菜单 使用VSCode 打开文件或文件夹
- 为快捷方式文件(lnk文件)右键菜单添加“打开所在文件夹”
- win10 右键菜单添加使用gvim打开方式
- Ubuntu的右键菜单中添加“打开终端”快捷方式
- 打开方式里用浏览添加不了程序的一种解决办法(以VC6.0为例,使.dsw文件以VC6.0默认打开)
- 通过注册表在文件的右键菜单添加程序快速打开
- 通过小练习掌握MFC知识点之起步篇--ComboBox的使用,DLL方式读取文件信息到CListCtrl控件中
- C# 系统应用之ListView控件 (三).添加ContextMenuStrip右键菜单打开删除文件
- XP中完美实现vista中快捷方式右键添加“打开文件位置”功能
- 解决双击文件打开很慢,右键菜单也慢
- 解决双击打开文件速度很慢,右键菜单也很慢的问题
- 解决双击打开文件速度很慢,右键菜单也很慢的问题
- [开发工具]_[Sublime Text 2]_[给zip版本的Sublime Text 2添加右键菜单打开文件]
- win7系统怎么样修改文件后缀的默认打开方式实现双击直接打开
- 【电脑使用】修改注册表,添加右键菜单“打开”的方法
- 双击默认文件打开方式
- 解决双击文件打开很慢,右键菜单也慢
- 右键菜单的“打开方式―选择程序”功能不能使用
- 通过小练习掌握MFC知识点之起步篇--ComboBox的使用,DLL方式读取文件信息到CListCtrl控件中