gpt4 book ai didi

c++ - С++ Microsoft MFC TreeView 图标

转载 作者:搜寻专家 更新时间:2023-10-31 00:51:24 26 4
gpt4 key购买 nike

我在一篇博文中写了一段TreeView控件的代码。我正在尝试将图标添加到列表项。但是图标没有渲染。我有下一个代码:

void CLeftView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();

// TODO: Add items by GetTreeCtrl().

HICON hi = NULL;
hi = AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDI_ICON1));
if (hi != NULL)
{
MessageBox(NULL, L"resource1");
}
else MessageBox(NULL, L"Not resource1");
HICON lo = NULL;
lo = AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDI_ICON2));
if (lo != NULL)
{
MessageBox(NULL, L"resource2");
}
else MessageBox(NULL, L"Not resource2");

CImageList m_tree_imglist;
CTreeCtrl & tc = CTreeView::GetTreeCtrl();

m_tree_imglist.Create(16, 16, ILC_COLOR32 | ILC_MASK, 0, 2);

m_tree_imglist.Add(hi);
m_tree_imglist.Add(lo);


tc.SetImageList(&m_tree_imglist, TVSIL_NORMAL);

HTREEITEM hItem;
hItem = tc.InsertItem(L"Fonts", 0, 0, TVI_ROOT);
tc.InsertItem(L"Arial", 0, 0, hItem);
tc.InsertItem(L"Times", 0, 0, hItem);
tc.Expand(hItem, TVE_EXPAND);
}

图标已添加到资源的文件中。我有错误吗?我有带有下一个文本的消息框:“resource1”、“resource2”。

最佳答案

m_tree_imglist 在堆栈上声明,此图像列表在 OnInitialUpdate 退出后被销毁,因此 CTreeCtrl 不再有图像列表。

应该将图像列表声明为类成员,这样只要 CTreeCtrl 需要它,它就一直有效。请注意,m_ 前缀通常在 MFC 中用于指示“类成员”。

class CLeftView : public CTreeView
{
CImageList m_tree_imglist;
...
};

void CLeftView::OnInitialUpdate()
{
...
//CImageList m_tree_imglist; <- remove
tc.SetImageList(&m_tree_imglist, TVSIL_NORMAL);
}

关于c++ - С++ Microsoft MFC TreeView 图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55321813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com