我正在使用VS2010开发一个MFC项目。当我点击CTreeCtrl控件的一个项目时,它很奇怪,其他一些不相关的项目有时会闪烁。我尝试了很多电脑,这个问题依然存在。任何解决方案?
这是一个BCGControlBar项目,CTreeCtrl与CWorkSpaceBar2类(如VS中的工作区栏)链接。我认为这不是重点,因为许多其他纯CTreeList演示也会共享相同的闪烁问题。下面提供了一个演示,您可以在单击CTreeCtrl项目时找到闪烁问题。虽然这不是我的代码,但我们也有同样的问题。
http://www.verysource.com/testmytreectrl-59412.html
以下是我的一些代码。你可以发现我并没有做一些可能导致问题的奇怪事情。
initIcons()功能用于初始化项目的图标。
add2Tree(CTreeCtrl * pTree,AFDir * pDir,HTREEITEM hItemParent,bool bHead)功能用于添加项目。
OnSelchanged(NMHDR * pNMHDR,LRESULT * pResult)函数在单击某个项目时不执行任何操作。
void CWorkSpaceBar2::initIcons()
{
// SHFILEINFO sfi;
// SHGetFileInfo(m_strDataDir, 0, &sfi, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
// m_iIconFolder = sfi.iIcon;
//
// SHFILEINFO sfi2;
// SHGetFileInfo(m_strDataDir + _T("coloring_rules.txt"), 0, &sfi2, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
// m_iIconScript = sfi2.iIcon;
//
// SHFILEINFO sfi3;
// SHGetFileInfo(m_strDataDir + _T("color2.ini"), 0, &sfi3, sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
// m_iIconProperty = sfi3.iIcon;
// HICON hIcon;
// hIcon = AfxGetApp()->LoadIcon(IDB);
/* Cil1.Create(IDB_VSICON, 16, 1, RGB(255, 0, 255)); // 建立16 位图像控制*/
m_imageList.Create(16, 16, ILC_COLOR32 | ILC_MASK, 10, 10);
CBitmap bitmap;
bitmap.LoadBitmap(IDB_VSICON);
m_imageList.Add(&bitmap, RGB(255, 0, 255));
// int bbb = Cil1.Add(aaa.FromHandle((HBITMAP) aaa), RGB(0, 0, 0));
//Cil1.Add(LoadIcon(NULL, (LPCTSTR) IDR_AffensicsTYPE));// 增加选中状态图像
m_wndTree.SetImageList(&m_imageList, TVSIL_NORMAL); //LVSIL_SMALL
m_iIconFolderClosed = LIST_ICON_FOLDER_CLOSED;
m_iIconScript = LIST_ICON_SCRIPT;
m_iIconProperty = LIST_ICON_PROPERTY;
//
// HTREEITEM root = m_wndTree.InsertItem(_T("root"), 0, 0);
// int i,j;
// for (i = 0; i < 4; i++)
// {
// HTREEITEM item = m_wndTree.InsertItem(_T("item"), 1, 1,root);
// for (j = 0; j < 3; j++)
// {
// m_wndTree.InsertItem(_T("small"), 0, 1, item);
// }
// }
}
void CWorkSpaceBar2::add2Tree(CTreeCtrl* pTree, AFDir* pDir, HTREEITEM hItemParent, bool bHead)
{
HTREEITEM hItem;
int iIcon = pDir->is_dir? m_iIconFolderClosed : m_iIconScript;
if (bHead)
{
hItem = pTree->InsertItem(pDir->name, iIcon, iIcon, TVI_ROOT);
m_mapDirs[hItem] = pDir;
m_mapDirs_R[pDir] = hItem;
}
else
{
hItem = pTree->InsertItem(pDir->name, iIcon, iIcon, hItemParent);
m_mapDirs[hItem] = pDir;
m_mapDirs_R[pDir] = hItem;
}
if (pDir->is_dir == TRUE)
{
for (size_t i = 0; i < pDir->dirs.size(); i ++)
{
add2Tree(pTree, pDir->dirs[i], hItem, FALSE);
}
for (size_t i = 0; i < pDir->files.size(); i ++)
{
add2Tree(pTree, pDir->files[i], hItem, FALSE);
}
}
else
{
addScript2Tree(pTree, pDir, hItem);
}
}
void CWorkSpaceBar2::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
return;
}