在最近的项目中,遇到 了这样一个比较棘手的问题,最后花了一天的时间才解决,现总结一下,以供大家参考!
问题:原来的项目工程在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风格,并且很简单实用。
但这是这个文件造成了上面的问题,删除这个文件和相对应的资源定义就可以。
为什么会这样呢?可能是不兼容吧,我也不太明白!有知道的可以在下面留言,让我长长见识~~~~~~~~~~~~~。
好记性不如烂笔头,方便自己也方便别人,希望能帮助你。。。