MFC 用ShellExecute打开外部文件

知识点:  
  获取CListCtrl选中文本    
  用ShellExecute打开外部文件


一、CListCtrl::GetFirstSelectedItemPosition
CListCtrl::GetFirstSelectedItemPosition
POSITION GetFirstSelectedItemPosition( ) const;
//返回选中项目的位置
二、CListCtrl::GetNextSelectedItem
CListCtrl::GetNextSelectedItem
int GetNextSelectedItem( POSITION& pos ) const;
//返回选中项目的索引值

三、ShellExecute函数
  HINSTANCE ShellExecute(
    HWND hwnd, //指定父窗口句柄,此参数可为NULL
    LPCTSTR lpOperation, //操作方式
    LPCTSTR lpFile, //要打开的文件名,一般是全路径的如 c:\1.txt
    LPCTSTR lpParameters, //要带的参数
    LPCTSTR lpDirectory,//默认运行目录
    INT nShowCmd //显示方式
);  


四、代码示例
  void CDialog_ListCtrl_Test::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{

     LPNMITEMACTIVATE pNMItemActivate = (LPNMITEMACTIVATE)(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    CListCtrl* plst_ctl=(CListCtrl*)GetDlgItem(IDC_LIST1);
    POSITION  pos=plst_ctl->GetFirstSelectedItemPosition();
    if (pos)
    {
        int item=plst_ctl->GetNextSelectedItem(pos);
        CString ws=plst_ctl->GetItemText(item,0); //获取文件名
        TRACE("%ws 
",ws);
        CString filepath;
        filepath=L"C:\Windows\";
        ws=filepath+ws; //算出文件路径
        ShellExecute(0,L"open",ws,NULL,NULL,SW_SHOW); //打开文件

    }
     
    *pResult = 0;
}
//////////////////////////
void CDialog_ListCtrl_Test::OnNMDblclkList1(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = (LPNMITEMACTIVATE)(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    //获取文件目录路径及文件
    CListCtrl* plst_ctl=(CListCtrl*)GetDlgItem(IDC_LIST1);
    //获取ListCtrl选中项的位置
    POSITION pos=plst_ctl->GetFirstSelectedItemPosition();
    if (pos)
    {
        int item_index=plst_ctl->GetNextSelectedItem(pos);
        //获取选中图标的文件名
        CString filename=plst_ctl->GetItemText(item_index,0);
        filename=FileDir+filename;
        TRACE("%ws 
",filename);
        ShellExecuteW(0,NULL,filename,NULL,NULL,SW_SHOWNORMAL);
    }

    *pResult = 0;
}
原文地址:https://www.cnblogs.com/whzym111/p/6224828.html