为何CImageList->Add()添加图标为何总是崩溃?

gfvera 2015-03-27 10:32:02
为何CImageList->Add()添加图标为何总是崩溃?

图片直接加载的就是没饭吃的ICON。
...全文
333 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
dimple0513 2016-04-28
  • 打赏
  • 举报
回复
楼主解决了吗?
xiaohuh421 2015-03-30
  • 打赏
  • 举报
回复
引用 10 楼 crow_sky 的回复:

    HICON hicon = NULL;
    hicon = AfxGetApp()->LoadIcon(IDI_ICON1);
    m_ImageList.Create(16,16,TRUE|ILC_COLOR32,8,8);//创建图像形式
    m_ImageList.Add(hicon);
    m_Tab.SetImageList(&m_ImageList);
    m_ImageList.Detach();
    TCITEM tcitem;
    m_Tab.GetItem(0, &tcitem);
    tcitem.iImage = 1;
    m_Tab.SetItem(0, &tcitem);
上面是我的代码。。 下面这行代码是从你的代码上拷出来的。结果还是崩掉了。。。。

    m_ImageList.Create(16,16,ILC_COLOR32,8,8);
    HICON hIcon = (HICON)LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16,16,0);
    m_ImageList.Add(hIcon);
    m_Tab.SetImageList(&m_ImageList);
m_Tab.SetImageList(&m_ImageList); 这里跟我的代码不一样. 确定IDI_ICON1 这个ID对应的ICO资源存在? 调试在 m_ImageList.Add(hIcon);下断点, 看是否前面一句加载成功.
zgl7903 2015-03-30
  • 打赏
  • 举报
回复
从贴出来的栈看 可能 你的 TabCtrl 用了自绘模式, 但是没有实现 DrawItem 函数
Eleven 2015-03-30
  • 打赏
  • 举报
回复
你的Tab Control设置了OWNER Draw风格了?
lx624909677 2015-03-29
  • 打赏
  • 举报
回复
这种崩溃,肯定是你要加载的内存为空他才蹦的,比如你的图片资源没有加载成功,或者存放图片的类对象没有开辟空间成功等
gfvera 2015-03-28
  • 打赏
  • 举报
回复
引用 11 楼 lx624909677 的回复:
你看下m_ImageList和hicon内存,两个都有空间的吗?看下堆栈调用窗口那里,如果都有空间并且够大那不应该蹦啊


第一次崩溃是因为我没有调用Create问题。。

但是我调用Create后还是崩了我就不明白了。。。


---------------------------
Microsoft Visual C++
---------------------------
User breakpoint called from code at 0x76823226
---------------------------
确定
---------------------------
lx624909677 2015-03-27
  • 打赏
  • 举报
回复
你这个根据资源的ID来加载的图片资源,看下hicon里的数据是不是空的
gfvera 2015-03-27
  • 打赏
  • 举报
回复
引用 5 楼 jason_wentzel 的回复:
[quote=引用 3 楼 crow_sky 的回复:] [quote=引用 1 楼 jason_wentzel 的回复:] m_ImageList你Create了吗?
我定义的是成员变量。也需要先Create吗?[/quote] 当然需要Create[/quote] 好吧,的确需要调用Create。但是为何我调用Create后ADD还是蹦了呢?。。 我在网上看到一篇文章添加的 http://zhidao.baidu.com/link?url=_kxiuYFIqNcXVtvhvyGrJNPLL4WOkML88POB9YZ85E6vkPyTfbovppHca2-agUT7JLgUXH6uCbm8XHgg-_i-JfEwrsFx0ibXShx06wVai8_ 上面描述的过程后直接添加成功,而我的却还是崩掉了。是否知道这是为何呢?
孤客天涯 2015-03-27
  • 打赏
  • 举报
回复
引用 3 楼 crow_sky 的回复:
[quote=引用 1 楼 jason_wentzel 的回复:] m_ImageList你Create了吗?
我定义的是成员变量。也需要先Create吗?[/quote] 当然需要Create
gfvera 2015-03-27
  • 打赏
  • 举报
回复
引用 2 楼 lx624909677 的回复:
点重试,然后看看代码断在哪儿了,看下堆栈调用,很有可能是你的图片是空的
断在ADD内部,图片使用的是MFC的程序图标也不可能是空白的啊
gfvera 2015-03-27
  • 打赏
  • 举报
回复
引用 1 楼 jason_wentzel 的回复:
m_ImageList你Create了吗?
我定义的是成员变量。也需要先Create吗?
lx624909677 2015-03-27
  • 打赏
  • 举报
回复
点重试,然后看看代码断在哪儿了,看下堆栈调用,很有可能是你的图片是空的
孤客天涯 2015-03-27
  • 打赏
  • 举报
回复
m_ImageList你Create了吗?
lx624909677 2015-03-27
  • 打赏
  • 举报
回复
你看下m_ImageList和hicon内存,两个都有空间的吗?看下堆栈调用窗口那里,如果都有空间并且够大那不应该蹦啊
gfvera 2015-03-27
  • 打赏
  • 举报
回复
引用 9 楼 xiaohuh421 的回复:
把你的代码上来看看

m_img.Create(16,16,ILC_COLOR32,8,8);
	// TODO: 在此添加额外的初始化代码
	//HICON hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1));
	HICON hIcon = (HICON)LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16,16,0);
	DWORD dwError = GetLastError();
	m_img.Add(hIcon);
	m_img.Add(hIcon);
	m_dirTree.SetImageList(&m_img, TVSIL_NORMAL);
	HTREEITEM hItem = m_dirTree.InsertItem(TEXT("AAA"), 1, 1 );
	hItem = m_dirTree.InsertItem(TEXT("BBBB"), 0,0, hItem);
	hItem = m_dirTree.InsertItem(TEXT("CCCC"), 0,0, hItem);
这个代码是没有问题的. 请参考. (前提: IDI_ICON1必需存在, 且是ico)

    HICON hicon = NULL;
    hicon = AfxGetApp()->LoadIcon(IDI_ICON1);
    m_ImageList.Create(16,16,TRUE|ILC_COLOR32,8,8);//创建图像形式
    m_ImageList.Add(hicon);
    m_Tab.SetImageList(&m_ImageList);
    m_ImageList.Detach();
    TCITEM tcitem;
    m_Tab.GetItem(0, &tcitem);
    tcitem.iImage = 1;
    m_Tab.SetItem(0, &tcitem);
上面是我的代码。。 下面这行代码是从你的代码上拷出来的。结果还是崩掉了。。。。

    m_ImageList.Create(16,16,ILC_COLOR32,8,8);
    HICON hIcon = (HICON)LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16,16,0);
    m_ImageList.Add(hIcon);
    m_Tab.SetImageList(&m_ImageList);
xiaohuh421 2015-03-27
  • 打赏
  • 举报
回复
把你的代码上来看看

m_img.Create(16,16,ILC_COLOR32,8,8);
	// TODO: 在此添加额外的初始化代码
	//HICON hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_ICON1));
	HICON hIcon = (HICON)LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16,16,0);
	DWORD dwError = GetLastError();
	m_img.Add(hIcon);
	m_img.Add(hIcon);
	m_dirTree.SetImageList(&m_img, TVSIL_NORMAL);
	HTREEITEM hItem = m_dirTree.InsertItem(TEXT("AAA"), 1, 1 );
	hItem = m_dirTree.InsertItem(TEXT("BBBB"), 0,0, hItem);
	hItem = m_dirTree.InsertItem(TEXT("CCCC"), 0,0, hItem);
这个代码是没有问题的. 请参考. (前提: IDI_ICON1必需存在, 且是ico)
gfvera 2015-03-27
  • 打赏
  • 举报
回复
引用 7 楼 lx624909677 的回复:
你这个根据资源的ID来加载的图片资源,看下hicon里的数据是不是空的
你好, AfxGetApp()->LoadIcon(IDR_MAINFRAME) 得到的hicon不为NULL。。。。。。

16,482

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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