如题,MFC对话框下有一个列表控件,控件下有一栏存放的是图片的在计算机中的路径,如:F:\picture\12.jpg
双击列表控件下的该图片路径,如何打开这个图片,就像双击图片打开图片的效果一样
谢谢赐教啊

解决方案 »

  1.   

    使用CImage加载图片并绘制出来,cimage类使用参考
    http://www.cnblogs.com/juncheng/articles/1600730.html或者百度下
      

  2.   


    void CServerDlg::OnNMDblclkListQuery(NMHDR *pNMHDR, LRESULT *pResult)
    {
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<NMITEMACTIVATE*>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    int row = m_listQuery.GetNextItem(-1,LVNI_ALL|LVNI_SELECTED);
    if (row < 0)
    {
    return;
    }
    CString PicPath = m_listQuery.GetItemText(row,5);
    if (PicPath.GetLength()<4)
    {
    return;
    }
    if (!PathFileExists(PicPath))
    {
    AfxMessageBox("图片不存在,或者已经被删除!");
    return;
    }
    CString SystemDir,Rundll,Parm;
    ::GetSystemDirectory(SystemDir.GetBuffer(256), 256);
    SystemDir.ReleaseBuffer();
    Rundll = SystemDir + "\\rundll32.exe";
    Parm.Format("%s\\shimgvw.dll,ImageView_Fullscreen %s", SystemDir, PicPath);
    ShellExecute(NULL, "Open", Rundll, Parm, NULL,  SW_SHOWNORMAL);
    *pResult = 0;
    }
      

  3.   


    头文件中添加:“atlimage.h”
    public:
        CString strPicPath;    //打开的图片文件文件名
        CString extname;    //打开的图片文件的扩展名
        CBitmap m_bitmap;   //创建位图对象
        CImage  m_MyImage;    //用于读取与显示jpg等格式的图像文件
        void ShowBitmap(CDC* pDC,CString strPicPath);    //用来显示指定位图的函数
        void ShowPic(CDC* pDC,CString picName);
    void CimageopenView::OnDraw(CDC* pDC)
    {
        CimageopenDoc* pDoc = GetDocument();
        ASSERT_VALID(pDoc);
        if (!pDoc)
            return;    // TODO: 在此处为本机数据添加绘制代码    if (0 == extname.Compare(_T("bmp")))
        {
            ShowBitmap(pDC,strPicPath);
        }
        else
        {
            if (0 == extname.Compare(_T("jpg"))||0 == extname.Compare(_T("jpeg"))||0 == extname.Compare(_T("gif")))
            {
                ShowPic(pDC,strPicPath);
            }
        }
    }// CimageopenView 消息处理程序
    //打开文件
    void CimageopenView::OnFileOpen()
    {
        // TODO: 在此添加命令处理程序代码
        CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("图片文件(*.jpg;*.jpeg;*.gif;*.bmp)|*.jpg;*.jpeg;*.gif;*.bmp|位图文件(*.BMP)|*.BMP||"));
        if (IDOK==dlg.DoModal())
        {
            strPicPath.Format(_T("%s"),dlg.GetPathName());
            extname = dlg.GetFileExt();             //返回选定文件的扩展文件名
            extname.MakeLower();        //将后缀名变成小写的
            Invalidate();
        }
    }
    //打开bmp图片
    void CimageopenView::ShowBitmap(CDC* pDC,CString strPicPath)
    {       
        HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,strPicPath,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
        m_bitmap.Detach();
        m_bitmap.Attach(hBitmap);    CRect rect;
        GetClientRect(&rect);    CDC dcImage;
        if (!dcImage.CreateCompatibleDC(pDC))
        {
            return;
        }
        BITMAP bm;
        m_bitmap.GetBitmap(&bm);
        dcImage.SelectObject(&m_bitmap);
        //pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY); //图片保留原始大小
        pDC->StretchBlt(0,0,rect.right,rect.bottom,&dcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); //图片拉伸显示,填满整个客户区
    }
    //打开jpg图片
    void CimageopenView::ShowPic(CDC* pDC,CString strPicPath)
    {       
        if(!m_MyImage.IsNull())
            m_MyImage.Destroy();
        HRESULT hResult=m_MyImage.Load(strPicPath);
        CRect rect;
        GetClientRect(&rect);
        //int iWidth=m_MyImage.GetWidth();
        //int iHeight=m_MyImage.GetHeight();
        //pDC->StretchBlt(0,0,rect.right,rect.bottom,&dcImage,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
        m_MyImage.Draw(pDC->m_hDC,rect);
      

  4.   

    STARTUPINFO si = {sizeof(si)};
    PROCESS_INFORMATION pi = {0};
    TCHAR szApp[MAX_PATH] = {_T("rundll32.exe C:\\WINDOWS\\system32\\shimgvw.dll,ImageView_Fullscreen F:\\11.bmp")};
    if(CreateProcess(NULL, szApp, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
    }
    else
    {
    DWORD dwRet = GetLastError();
    CString str;
    str.Format(_T("%d"), dwRet);
    AfxMessageBox(str);
    }
      

  5.   

    还是不行啊,我用了一个CString的变量存路径,跟了下他的值是 F:\11.jpg
    用PathFileExists()判断了下说该文件不存在,我在F盘下看了,这个文件有啊,纠结啊
      

  6.   

    简单点 这么来 ~
    ShellExecute(0,L"open",L"f:\\123.jpg",NULL,NULL,SW_SHOW);