2013-02-22 63 views
-1

请帮忙!我已经试过通过图标,hbitmap和cbitmap(我使用mfc基于对话框的应用程序)将图像加载到图像列表。但图像不会显示出来。但是当我在空的sdi mfc应用程序上重新创建它时,我设法查看了图像。mfc将图像加载到树形控件的图像列表

m_TreeInspCtrl.DeleteAllItems(); 

CImageList imgl_Tree; 
imgl_Tree.Create(16, 16, ILC_COLOR32, 1, 1); 

/* 
HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_TREE_PASS), IMAGE_BITMAP, 0, 0, LR_LOADMAP3DCOLORS); 
*/ 

imgl_Tree.Add(AfxGetApp()->LoadIcon(IDI_ICON_PASS)); 

/* 
CBitmap m_TreePass; 
//m_TreePass.Attach(hBmp); 
m_TreePass.LoadBitmap(IDB_TREE_PASS); 
imgl_Tree.Add(&m_TreePass, RGB(255,0,255)); 
*/ 

m_TreeInspCtrl.SetImageList (&imgl_Tree, TVSIL_NORMAL); 

CString s_Root = "Inspection Sequence"; 
HTREEITEM h_Root = m_TreeInspCtrl.InsertItem(s_Root, 0, 0, TVI_ROOT); 
m_TreeInspCtrl.SetItemColor(h_Root, RGB(0, 150, 0)); 
+0

你的问题是什么?也请删除'请帮助',这不是礼貌。 – sashoalm 2013-02-22 07:34:44

回答

1

您必须创建一个在整个存在对话框中都有效的CImageList。你在代码中创建的只是临时的,当初始化函数返回时它会被销毁。我建议你将它创建为对话框类的成员变量。

+0

这是一个常见的错误,人们不知道设计是否应该改为使用图像列表的控件来维护自己的内部CImageList实例。 – 2013-02-22 22:47:03

+1

@ NikBougalis-是的,这是一个非常常见的错误,但是这种设计也允许CImageList在多个CListCtrl,CTreeCtrl等之间共享。做了几次后,将它添加到CDialog类中变得非常自然成员变量,当需要时。 – mfc 2013-02-22 23:34:52

+0

谢谢! gdi,从来没有注意到它。 – 2013-02-25 03:50:09