关于在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风格,并且很简单实用。

但这是这个文件造成了上面的问题,删除这个文件和相对应的资源定义就可以。

为什么会这样呢?可能是不兼容吧,我也不太明白!有知道的可以在下面留言,让我长长见识~~~~~~~~~~~~~。

好记性不如烂笔头,方便自己也方便别人,希望能帮助你。。。

时间: 2024-09-29 22:07:49

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

定制progrebar-如何让控件在2.x系统里显示holo风格(4.x系统下的控件风格)

定制progrebar,这里以progrebar(small)为例,使之在2.x系统里显示holo风格. 1)找到系统文件styles.xml 和themes.xml. 在目录adt-bundle\sdk\platforms\android-19\data\res\values下找到styles.xml和  themes.xml,用Uedit打开: 2) 在系统的styles.xml中搜索控件名称progrebar,找到 "  <style name="Widget.Holo.P

Microsoft ReportViewer 控件类型版本兼容问题及解决方法

错误 Parser Error Message: The base class includes the field 'rvEquipment', but its type (Microsoft.Reporting.WebForms.ReportViewer) is not compatible with the type of control (Microsoft.Reporting.WebForms.ReportViewer). 添加引用,因为项目的.Net框架版本是4.0,因此Report

64位系统下8G内存仅使用到4G问题的解决方法

笔记本:联想E46G 当前bios版本:25CN32WW 内存:DDR3 133 4G × 2 问题:bios信息显示8G,win7和ubuntu 在64位下使用情况仅4G 准备工作1:bios版本和内存检查方法或工具 开机按 F2 键 进bios,核实bios版本和内存信息,或者登录联想官方网站安装<在线检查工具> 准备工作2:os下内存检测方法 1: win7下,右键点击计算机=>属性,内存方面显示 8G/(使用情况:2.93G) 2:ubuntu下,lshw -short | gr

C# 引发“线程间操作无效: 从不是创建控件“XXX”的线程访问它” 解决方法

在异步线程启动后添加 “CheckForIllegalCrossThreadCalls = false;”即可有效的防止 异步线程给UI控件赋值时  引发异常 例如: //Framework 2.0 //ServerThread = new Thread(RecieveAccept); //ServerThread.Start(); //Framework 4.0以上 ServerTask = new Task(() => RecieveAccept()); ServerTask.Start()

ASP.NET让FileUpload控件支持浏览自动上传功能的解决方法

ASP.NET的FileUpload控件默认是不支持服务端的onchange事件的,此时可以用一种变通的方法来实现这一功能. 这就需要借用客户端的onchange事件,调用__doPostBack方法来用LinkButton的OnClick事件模拟一个事件触发的过程,具体代码如下: 客户端: <asp:FileUpload ID="fuPhoto" onchange="javascript:__doPostBack('lbUploadPhoto','')" r

Windows7下默认网关不能保存ip的两种解决方法

Windows7下默认网关不能保存ip解决方法 第一种: 第一步:点击左下角的WIN图标或WIN图标+R也可,输入CMD然后回车,打开DOS模式窗口.第二步:在DOS命令行提示符下直接输入:“netsh winsock reset”,输入的是引号内的,不包含引号,然后回车,提示需要重启,暂时不重启.第三步:在DOS命令行提示符下直接输入:“netsh int ip reset reset.log”,然后回车,提示重新启动计算机完成此操作.第四步:关闭DOS窗口,重新启动计算机,问题解决. 第二种

XP系统下Chrome浏览器打开某些网站闪退的解决办法

这个星期用Chrome浏览网站的过程中,突然出现没有什么提示的闪退现象.一开始没怎么注意,以为只是偶然现象,但当重启Chrome后点恢复按钮再次闪退,这就可以肯定是因为打开某些网站造成.于是再次重启Chrome浏览器并按下恢复按钮,在可能导致Chrome闪退那个网站打开之前关闭那个分页,这样Chrome就不闪退了.这个办法只能治标不能治本,下次再打开这个网站同样会出现闪退的现象. 为了彻底解决这个问题,于是就用搜索引擎找找看有没有解决办法.首先用"Chrome打开某些网站闪退"作为关键

线程间操作无效: 从不是创建控件“pbarc”的线程访问它 解决方法

public partial class Form5 : Form { public Thread PBarThread; private delegate void MyTestDelegate(object obj); private MyTestDelegate myTest; /// <summary> /// dev进度条 /// </summary> private DevExpress.XtraEditors.ProgressBarControl pBarc; pub

win7的64位系统注册ocx控件

 win7的64位系统注册ocx控件 简介:前两天系统出问题了,导致开发环境很多插件需要重装, 当我针对winform的几个错误,安装控件解决时,就出现了错误, 始终装不上,如图: 解决方案: 1.首先复制 XXXX.OCX文件到"C:\Windows\SysWOW64"目录. (XXXX.OCX 是你准备注册的OCX控件) 2.在C:\Windows\sysWOW64 目录中找到cmd.exe的程序 3.右键单击该程序选择"管理员身份运行" 4.进入cmd D