【VS2010,已把图片一齐打包进exe,形成单个exe程序,编译器内调试成功显示图片,但把exe复制到桌面就不能显示图片了】

skynet88888 2016-11-12 07:46:14

VS2010,已把图片一齐打包进exe,形成单个exe程序,编译器内调试成功显示图片,但把exe复制到桌面就不能显示图片了,我已经用GetFullPathName获取exe运行时的全路径了,怎么还找不到图片?前辈们如何实现单个exe内含图片,复制到任何目录都能显示图片的?

【注:】我建的是Win32项目,不用MFC,请大神们不要给我回复MFC代码。


		HDC hdc=GetDC(hWnd);
Graphics gps(hdc);
char* szFile=new char[256];
for (int i=0;i<256;i++)
{
szFile[i]='\0';
}

WCHAR* wFile=(WCHAR*)szFile;
GetFullPathName(L"res\\KenBG.jpg",128,wFile,0);
Image imgKenBG(wFile); // 加载图片
gps.DrawImage(&imgKenBG,30,30); //显示图片
ReleaseDC(hWnd,hdc);
...全文
411 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-11-13
  • 打赏
  • 举报
回复
引用 14 楼 skynet88888 的回复:
[quote=引用 11 楼 paschen 的回复:] [quote=引用 10 楼 skynet88888 的回复:] [quote=引用 9 楼 paschen 的回复:] GetFullPathName 是你要先找得到这个相对地址,然后函数返回完整地址你 如果你把EXE放到桌面,那么你也要把res文件夹放到桌面
"已把图片一齐打包进exe,形成单个exe程序"——大虾连提问都不看就回答问题吗?[/quote] 不是你放到EXE里就可以搜索 \\res 这个目录 使用时你一样要从资源里先生成这个文件 可以使用LoadResource LockResource 得到 ,然后写到文件[/quote] ①如果图片不放到exe里就能搜索到了,关键是我把它放到了exe里②另外,LoadResource得到的是资源句柄,我要用GDI+来绘制这个jpg图片,不是用GDI,GDI+怎么使用这个句柄?怎么把它转换成Image对象?[/quote] 参看:http://blog.csdn.net/chenlycly/article/details/31734147
skynet88888 2016-11-13
  • 打赏
  • 举报
回复
引用 12 楼 u010165006 的回复:
http://bbs.csdn.net/topics/300130091 没找到好的文章,我主要用BCB很方便,对VC嵌入资源图片也不太熟。
那文章的代码是用的MFC函数AfxGetResourceHandle,我的是win32项目,不能用这个函数吧?
skynet88888 2016-11-13
  • 打赏
  • 举报
回复
引用 11 楼 paschen 的回复:
[quote=引用 10 楼 skynet88888 的回复:] [quote=引用 9 楼 paschen 的回复:] GetFullPathName 是你要先找得到这个相对地址,然后函数返回完整地址你 如果你把EXE放到桌面,那么你也要把res文件夹放到桌面
"已把图片一齐打包进exe,形成单个exe程序"——大虾连提问都不看就回答问题吗?[/quote] 不是你放到EXE里就可以搜索 \\res 这个目录 使用时你一样要从资源里先生成这个文件 可以使用LoadResource LockResource 得到 ,然后写到文件[/quote] ①如果图片不放到exe里就能搜索到了,关键是我把它放到了exe里②另外,LoadResource得到的是资源句柄,我要用GDI+来绘制这个jpg图片,不是用GDI,GDI+怎么使用这个句柄?怎么把它转换成Image对象?
skynet88888 2016-11-13
  • 打赏
  • 举报
回复
青蛙大师在12楼回复的和斑竹在16楼回复的是类似的方法,都解决了我的问题,鉴于青蛙大师较早回复了正确答案...
ooolinux 2016-11-12
  • 打赏
  • 举报
回复
图形用户界面可以学习C++ Builder,入门比较容易。 仅供参考: 初学者学习C++ Builder第一个程序(模拟聊天室),经典! http://blog.163.com/tab_98/blog/static/11924097201693033057497/ 从C语言的菜单界面管理系统到C++ Builder的图形用户界面,一个简单的电话簿Demo例子 http://blog.163.com/tab_98/blog/static/1192409720158673337998/ 学C++还是C#、Java? http://blog.163.com/tab_98/blog/static/11924097201511274543737/ 《C++ Builder(BCB)从初学到入门》 http://blog.163.com/tab_98/blog/static/119240972016157466626/
ooolinux 2016-11-12
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/300130091 没找到好的文章,我主要用BCB很方便,对VC嵌入资源图片也不太熟。
paschen 2016-11-12
  • 打赏
  • 举报
回复
引用 10 楼 skynet88888 的回复:
[quote=引用 9 楼 paschen 的回复:] GetFullPathName 是你要先找得到这个相对地址,然后函数返回完整地址你 如果你把EXE放到桌面,那么你也要把res文件夹放到桌面
"已把图片一齐打包进exe,形成单个exe程序"——大虾连提问都不看就回答问题吗?[/quote] 不是你放到EXE里就可以搜索 \\res 这个目录 使用时你一样要从资源里先生成这个文件 可以使用LoadResource LockResource 得到 ,然后写到文件
skynet88888 2016-11-12
  • 打赏
  • 举报
回复
引用 9 楼 paschen 的回复:
GetFullPathName 是你要先找得到这个相对地址,然后函数返回完整地址你 如果你把EXE放到桌面,那么你也要把res文件夹放到桌面
"已把图片一齐打包进exe,形成单个exe程序"——大虾连提问都不看就回答问题吗?
paschen 2016-11-12
  • 打赏
  • 举报
回复
GetFullPathName 是你要先找得到这个相对地址,然后函数返回完整地址你 如果你把EXE放到桌面,那么你也要把res文件夹放到桌面
skynet88888 2016-11-12
  • 打赏
  • 举报
回复
引用 6 楼 u010165006 的回复:
GetFullPathName(L"res\\KenBG.jpg",128,wFile,0); ———————— 你是用相对地址来加载外部图片,EXE放在别的位置,相对地址就不对了。 应该使用资源来嵌入图片,程序运行时从可执行程序实例资源中加载图片。
青蛙大师怎么不说话了?
skynet88888 2016-11-12
  • 打赏
  • 举报
回复
引用 6 楼 u010165006 的回复:
GetFullPathName(L"res\\KenBG.jpg",128,wFile,0); ———————— 你是用相对地址来加载外部图片,EXE放在别的位置,相对地址就不对了。 应该使用资源来嵌入图片,程序运行时从可执行程序实例资源中加载图片。
青蛙大师说到点子上了!在下就是想求你这种方法,能赐教代码怎么写吗?
ooolinux 2016-11-12
  • 打赏
  • 举报
回复
GetFullPathName(L"res\\KenBG.jpg",128,wFile,0); ———————— 你是用相对地址来加载外部图片,EXE放在别的位置,相对地址就不对了。 应该使用资源来嵌入图片,程序运行时从可执行程序实例资源中加载图片。 for (int i=0;i<256;i++) { szFile[i]='\0'; } ———————— 可以使用memset函数更方便。
ipqtjmqj 2016-11-12
  • 打赏
  • 举报
回复
引用 4 楼 skynet88888 的回复:
[quote=引用 3 楼 ipqtjmqj 的回复:] 报什么错误,如果不报,调用GetLastError看看
没有任何错误,编译器内调试正常显示图片,把exe复制到桌面也能运行,但窗口不显示这张图片[/quote] 把在"编译器内调试正常显示图片",与“复制到桌面也能运行,但窗口不显示这张图片”各截一张图看看
skynet88888 2016-11-12
  • 打赏
  • 举报
回复
引用 3 楼 ipqtjmqj 的回复:
报什么错误,如果不报,调用GetLastError看看
没有任何错误,编译器内调试正常显示图片,把exe复制到桌面也能运行,但窗口不显示这张图片
ipqtjmqj 2016-11-12
  • 打赏
  • 举报
回复
报什么错误,如果不报,调用GetLastError看看
skynet88888 2016-11-12
  • 打赏
  • 举报
回复
引用 1 楼 ipqtjmqj 的回复:
可能不是这里出问题,在其他地方用了相对路径
绝对不是,核心代码就这些。
ipqtjmqj 2016-11-12
  • 打赏
  • 举报
回复
可能不是这里出问题,在其他地方用了相对路径

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧