请教两个MFC中加载图片的问题

gaochizhen33 2011-09-16 09:43:48
第一个问题:为应用程序加载图标,LoadIocn函数貌似必须要把图标加载进资源文件中,LoadImage不知道怎么用,能不能通过从指定的路径读取文件呢?也就是说能不能修改图标的时候只要替换掉指定文件的图标图片,就能达到修改应用程序图标的效果,不需要重新加载进资源文件,重新编译呢?

第二个问题:在为工具栏按钮加载图片时,能不能为每个按钮单独加载图片?我看好多例子都是创建图片列表,然后加载进资源中,能不能像上个问题一样,也是从指定路径读取呢?这样修改图片的时候只需替换掉图片即可,不用重新编译了。再有就是创建图片列表有什么好处呢?
...全文
180 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaochizhen33 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 chinatcp 的回复:]
看是什么错误,一般不用自己写 SetIcon吧。

我用VC2010,
m_hIcon = (HICON)LoadImage(NULL,L"D:\\myIcn.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);
这句放在构造函数中,

SetIcon在 OnInitDialog本身就有了。


不知道是什么错误,如果是无效句柄,在SetIcon前,可以加个……
[/Quote]
我们的工程需要自己重写InitInstance。 我在获得了图标资源后,直接
m_pMainWnd->SetIocn(m_hIcon, FALSE);
但是系统会报个这样的错误 Debug Assertion Failed!
罗平 2011-09-16
  • 打赏
  • 举报
回复
看是什么错误,一般不用自己写 SetIcon吧。

我用VC2010,
m_hIcon = (HICON)LoadImage(NULL,L"D:\\myIcn.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);
这句放在构造函数中,

SetIcon在 OnInitDialog本身就有了。


不知道是什么错误,如果是无效句柄,在SetIcon前,可以加个判断。
if(m_hIcon) SetIocn(m_hIcon, FALSE);
gaochizhen33 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 chinatcp 的回复:]
用 LoadImageW 试试。
[/Quote]
能获取到图标资源,但是SetIcon的时候总会出错,我的主窗口指针为m_pMainWnd,是不是直接
m_pMainWnd->SetIocn(m_hIcon, FALSE);就可以了,但是在这步的时候总会提示错误
罗平 2011-09-16
  • 打赏
  • 举报
回复
用 LoadImageW 试试。
gaochizhen33 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chinatcp 的回复:]
引用 4 楼 gaochizhen33 的回复:
引用 3 楼 chinatcp 的回复:
用 LoadImage


m_hIcon = (HICON)LoadImage(NULL,L"D:\\myIcn.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);


NULL后面的L是什么意思?这样写就行了么?还需要SetIcon么?



L 代表宽字……
[/Quote]
用的是VS2003 不知道可以不?我刚开始按照你给的方法 会报这样的错误 error C2664: “LoadImageA” : 不能将参数 2 从“const unsigned short [40]”转换为“LPCSTR”
与指向的类型无关;
使用(LPCSTR)强制转换后能通过了 还是会报调试错误。我正在找出错地方
罗平 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gaochizhen33 的回复:]
引用 3 楼 chinatcp 的回复:
用 LoadImage


m_hIcon = (HICON)LoadImage(NULL,L"D:\\myIcn.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);


NULL后面的L是什么意思?这样写就行了么?还需要SetIcon么?
[/Quote]


L 代表宽字符,相当于 _T(),用户 Unicode环境,
如果是VC6,就把 L 去掉,

这个代替你原来 的 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON); 就行了。

gaochizhen33 2011-09-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chinatcp 的回复:]
用 LoadImage


m_hIcon = (HICON)LoadImage(NULL,L"D:\\myIcn.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);
[/Quote]

NULL后面的L是什么意思?这样写就行了么?还需要SetIcon么?
罗平 2011-09-16
  • 打赏
  • 举报
回复
用 LoadImage


m_hIcon = (HICON)LoadImage(NULL,L"D:\\myIcn.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);
gaochizhen33 2011-09-16
  • 打赏
  • 举报
回复
来个牛人啊
能解释一个也行啊
gaochizhen33 2011-09-16
  • 打赏
  • 举报
回复
我晕 别沉啊 来些高人指点指点啊

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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