关于在xp系统下CTreeCtrl控件不显示图标的一种解决方法

在最近的项目中,遇到 了这样一个比较棘手的问题,最后花了一天的时间才解决,现总结一下,以供大家参考!

问题:原来的项目工程在XP系统下用VC6编写的,一切没有问题。但由于现实需要需要在WIN7/XP系统运行,我们把工程转到了VC2010,在WIN7下没有问题。但在XP却出现了一个莫名的问题:就是CTreeCtrl控件的BMP图标不显示,在显示图标的地方全部不显示(为空),经过反复检测,确认代码没有问题(在WIN7系统下没有出现问题)。

其中的显示图标的CTreeCtrl控件代码如下:

.h文件

CTreeCtrl           m_Tree;
CImageList       m_Img;


.cpp文件

m_Tree.Create (WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS, CRect(0,0,200,400), this, 0x09992);

m_Img.Create(16, 16, ILC_COLOR | ILC_MASK, 1, 1);

CBitmap bmp;


bmp.LoadBitmap(IDB_BITMAP1);

int   iNo  = m_Img.Add(&bmp, RGB(255,255,255));

bmp.Detach();


bmp.DeleteObject();  

m_wndStationTree.SetImageList(&m_Img,  TVSIL_NORMAL);

HTREEITEM hPA = m_wndStationTree.InsertItem("123", iNo, iNo);


m_wndStationTree.InsertItem("456", 0, 0, hPA);


程序运行后就是不显示项目前面的图标。后面一次无意的修改,发现了问题,问题的罪魁祸首竟是“xptheme.xml”文件,该文件的内容如下:

//////////////////////////////////////////////////////////////////////////////////////////////

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly 
   xmlns="urn:schemas-microsoft-com:asm.v1" 
   manifestVersion="1.0">
<assemblyIdentity 
    processorArchitecture="x86" 
    version="5.1.0.0"
    type="win32"
    name="XXXexe"/>
    <description>XXX Application</description>
    <dependency>
    <dependentAssembly>
    <assemblyIdentity
         type="win32"
         name="Microsoft.Windows.Common-Controls"
         version="6.0.0.0"
         publicKeyToken="6595b64144ccf1df"
         language="*"
         processorArchitecture="x86"/>
    </dependentAssembly>
    </dependency>
</assembly>

/////////////////////////////////////////////////////////////////////////////////////////////

也许有朋友对这个文件不会陌生,他主要的作用就是是我们编写的软件具有xp风格,并且很简单实用。
但这是这个文件造成了上面的问题,删除这个文件和相对应的资源定义就可以。
为什么会这样呢?可能是不兼容吧,我也不太明白!有知道的可以在下面留言,让我长长见识~~~~~~~~~~~~~。
好记性不如烂笔头,方便自己也方便别人,希望能帮助你。。。


你可能感兴趣的:(VS2010,bmp,CImageList,CTreeCtrl不显示图标)