CGfxOutBarCtrl之BUG篇

2016-01-29 12:03 26 1 收藏

CGfxOutBarCtrl之BUG篇,CGfxOutBarCtrl之BUG篇

【 tulaoshi.com - C语言心得技巧 】

CGfxOutBarCtrl之BUG篇
作者: 李晓飞

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com) 下载本文源代码

我是一位VC++的初学者,算起来时间还不到四个月,但是我几乎每天都会光临VC知识库网站,我是位界面发烧友,对网站上的新控件都是一一不舍的感觉。VC知识库网站近日刊登的一个仿OutLook的界面类CGfxOutBarCtrl我下载后发现了一些问题,觉得这些小问题有点影响界面整体的美观,大方,所以我想贡献出改进后的CGfxOutBarCtrl全部代码。

一、问题的提出

现在先让我们列出CGfxOutBarCtrl存在的所有问题,然后我们再一一解决:
1. 如果删除某个非TreeBar目录后会出现如下图所示的情况:


2. 删除TreeBar目录会出现如下图所示的情况:


3. 另外CgfxOutBarCtrl为我们提供的右键菜单是“鸟语”,我们必须进行“汉化”工作。
那么接下来就让我们来一一解决这些问题吧。

二、问题的解决

1. 出现问题1的情况是因为在移除了目录(Folder)之后CgfxOutBarCtrl视图区域没有被刷新的原因,查看文件GfxOutBarCtrl.cpp中的RemoveFolder函数才知道它在删除完目录后没有进行主动刷新操作,而是被动的等待Windows的刷新通知。那么就让我们来主动发通知消息来让视图区域进行刷新(重画)操作吧!本人刚开始用SendMessage给CgfxOutBarCtrl发送WM_SIZE消息来让视图区刷新,但是后来我运行了N多次突然又发现了原来的情况又出现了,所以我又研究了CgfxOutBarCtrl类的结构,发现当用户变换了当前目录(Folder)后,CgfxOutBarCtrl类都会主动的去刷新重绘视图区,既然如此我们就无须再写多余的代码只须主动的去调用函数:SetSelFolder()即可。

2. 出现问题2的情况是因为CgfxOutBarCtrl类在RemoveFolder函数中仅仅删除了CBarFolder类成员对象,而没有删除掉CBarFolder类中的CTreeCtrl类指针所指向的CTreeCtrl类成员对象。所以才会造成目录被删除了但实际的CtreeCtrl类对象还存在的情况。那么我们只须在RemoveFolder函数中加入释放CTreeCtrl对象的代码即可。
那么修改后的RemoveFolder函数代码如下:(加黑部分为本人添加的代码)
void CGfxOutBarCtrl::RemoveFolder(const int index){ASSERT(index >= 0 && index < GetFolderCount());CBarFolder * pbf = (CBarFolder *) arFolder.GetAt(index);//Modified By Blue Sky WorkRoom //Author:LiXiaoFei  Date:2003Y-01M-14D::11:15//原程序未释放Folder中的子窗体空间造成显示混乱.if(pbf->pChild){::SendMessage(pbf->pChild->m_hWnd, WM_CLOSE, 0, 0);//等价于:pbf->pChild->DestroyWindow();}delete pbf;arFolder.RemoveAt(index);if (iSelFolder >= index) iSelFolder = index - 1;if (iSelFolder < 0 && GetFolderCount() > 0) iSelFolder = 0;//Modified By Blue Sky WorkRoom //Author:LiXiaoFei  Date:2003Y-01M-14D::11:35//原程序在删除子窗体后没有更新视图区,造成目录显示混乱.//解决办法://        手工设置当前页面:SetSelFolder(iSelFolder);SetSelFolder(iSelFolder);Invalidate();}
3. CGfxOutBarCtrl右键菜单的汉化问题其实只需要修改GfxOutBarCtrl.cpp文件中的几个#define即可。修改如下:
//汉化工作#define _ID_GFX_SMALLICON"小图标风格"#define _ID_GFX_LARGEICON"大图标风格"//#define _ID_GFX_REMOVEITEM"删除子项"#define _ID_GFX_RENAMEITEM"子项重命名"
好了,关于CGfxOutBarCtrl类中存在的问题我就先说到这里吧,如果大家在以后的使用过程中也发现了CGfxOutBarCtrl的BUG,可以写信到lixiaofei@geasp.com告诉我,感谢了!再次谢谢VC知识库为我们提供的交流机会。

来源:http://www.tulaoshi.com/n/20160129/1484441.html

延伸阅读
标签: 生活常识
家居清洁之客厅清洁篇   客厅是使用频率较高的地方,容易脏污,也不易打扫。作为一个家庭的首要空间,那么客厅应该如何清洁呢?下面让我们看看家居清洁之客厅清洁篇,帮助更多的人们更好的打扫客厅。 实木家具污渍清洁 实木家具表面的污渍,一般用温茶水等将其轻轻擦去,涂抹少许光蜡则看而已减轻损伤,并在表面形成一种...
我这里重点的介绍如何写驱动程序,对于一些应用程序我就不做介绍了,因为我对于那些高层的东西写得很少。倘若再讲,有班门弄斧之嫌,呵呵! 作为WIN98和WIN2K推荐的一项新技术来说,USB的驱动程序和以往的直接跟硬件打交道的WIN95的VXD的方式的驱动程序不同,它应该是WDM类型的。 USB的WDM接口框图如下(这个图可以说是USB软件总...
标签: ASP
  在维护网站的过程用,可能遇到过这样的情况:辛辛苦苦做出来的页面,但图片过多,网页结构、表格结构复杂,程序冗 长,使得加载速度很慢!网页总是不能完全的展现在浏览者面前。 以后的几篇文章野猫将自己在网页减肥方面的一些经验介绍给大家,希望大家都来讨论,说说自己的观点! 有关图片: 尽量把几个可能组合在一起的图片制作成...
标签: flash教程
要做出动态的遮罩效果,就要用到一些象Symbol、关键帧的基本知识了。 打开,画一个圆形,并填充如下图的球形渐变,按F8将它转化为Graphic符号。 在第30帧位置按F6插F8入关键帧,并将球形水平向右移一段距离,再将鼠标放在第1帧和第30帧之间,按右键,在展开的菜单中选中,这样就做好了球形水平从左到右运动的...
标签: 摄影
尽管像美国优胜美地国家公园或者大烟山这样的著名景点是参观和拍摄的好地方,但是对于那些热衷于风景 摄影 的人来说,这些景点在自己所有的风景摄影中只占很小的一部分。因此,如果非要等着去这些地方拍摄的机会,那么势必会成为一个悲哀的摄影者。不过,我们谈及的是摄影的魅力以及它所带来的快乐和兴趣,因此,让我们抛开这些,看看摄影给我...

经验教程

693

收藏

92
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部