MFC 如何通过地址打开图片 如题,MFC对话框下有一个列表控件,控件下有一栏存放的是图片的在计算机中的路径,如:F:\picture\12.jpg双击列表控件下的该图片路径,如何打开这个图片,就像双击图片打开图片的效果一样谢谢赐教啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用CImage加载图片并绘制出来,cimage类使用参考http://www.cnblogs.com/juncheng/articles/1600730.html或者百度下 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;} 头文件中添加:“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); 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); } 还是不行啊,我用了一个CString的变量存路径,跟了下他的值是 F:\11.jpg用PathFileExists()判断了下说该文件不存在,我在F盘下看了,这个文件有啊,纠结啊 简单点 这么来 ~ShellExecute(0,L"open",L"f:\\123.jpg",NULL,NULL,SW_SHOW); 如何关闭VC2005的Intellisence功能? 关于鼠标钩了的一个奇怪问题(已经问了好多次了,望高手帮忙) 怎样取消odbc登录弹出框 请问*如何用程序判断信使服务是否开启? 命名管道实现 服务器 和 客户端登陆界面 的通讯,无法做到循环自动判断,求解决…… 求教:怎样使用一个DLL? 急!!!在InstallShield中如何执行sql语句建一个数据库? 不懂就问!!上位机盲请教个问题 关于Firefox编程 CArray中能不能嵌套? 图像处理,怎样改变图像的灰度 mfc中如何给CDialog的派生类指定窗体
http://www.cnblogs.com/juncheng/articles/1600730.html或者百度下
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;
}
头文件中添加:“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);
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);
}
用PathFileExists()判断了下说该文件不存在,我在F盘下看了,这个文件有啊,纠结啊
ShellExecute(0,L"open",L"f:\\123.jpg",NULL,NULL,SW_SHOW);