2013-02-22 3 views
-1

도와주세요! 나는 icon, hbitmap 및 cbitmap (mfc 대화 상자 기반 응용 프로그램을 사용하고 있습니다)을 통해 이미지 목록에 이미지로드를 시도했습니다. 그러나 이미지가 나타나지 않습니다. 그러나 빈 sdi mfc 응용 프로그램에서 이미지를 다시 만들 때 이미지를 볼 수있었습니다.mfc 트리 컨트롤 용 imagelist에 이미지로드

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

답변

1

대화 상자가있는 곳에서 유효한 CImageList를 만들어야합니다. 코드에서 만든 스택은 스택에 임시로 저장되며 초기화 함수가 반환 될 때 소멸됩니다. 대화 상자 클래스의 멤버 변수로 만들 것을 제안합니다.

+0

이미지 목록을 사용하는 컨트롤이 자신의 내부 CImageList 인스턴스를 유지하도록 디자인을 변경해야하는지 여부는 궁금해하는 일반적인 실수입니다. –

+1

@ NikBougalis- 예, 이것은 매우 흔한 실수입니다. 그러나이 디자인은 여러 CListCtrl, CTreeCtrl 등에서 CImageList를 공유 할 수있게 해줍니다. 몇 번 해본 후 CDialog 클래스에 추가하는 것이 자연스럽게되었습니다. 멤버 변수가 필요할 때 – mfc

+0

고맙습니다! gdi, 결코 전혀 그것을 알아 차리지 못했습니다. –