使用C++Buider制作自绘画列表框

使用C++Buider制作自绘画列表框,第1张

使用C++Buider制作自绘画列表框,第2张

C++ Builder中的列表框和组合框控件提供了自绘图界面。这些接口可用于将列表框和组合框中的项目显示为图像。把这个功能封装成一个组件就更好了。这里有一个列表框的例子来演示这个过程。

实现原则

列表的某些样式属性定义了三种样式,lbStandard样式只能显示文本,bOwner-DrawFixed和lbOwnerDrawVariable样式可以实现自绘制功能。不同的是,前一种样式的列表框中每个项目的高度是相同的,而后者允许应用程序为每个项目定义不同的高度。

具有自绘风格的列表框在列表框外观发生变化时,如添加、删除和滚动项目时,总是会触发两个事件句柄:

tmeasureitem event on measure item;
tdrawitevent OnDrawItem;
typedef void _ _ fastcall(_ closure * TDrawItemEvent)(twin Control * Control,int Index,Trect & RectTOwnerDrawState州);
typedef void _ _ fastcall(_ closure * TMeasureItemEvent)(twin Control * Control,int Index,int & Height);

OnMeasureItem事件传递了一个参数高度。应用程序需要填充一个项目来确定该项目的高度。如果没有改变,将使用列表框中ItemHeight的值。lbOwnerDrawFixed样式列表框不触发此事件,因此它使用自己的ItemHeight。OnDrawItem传递的Rect表示可以在屏幕上绘制的矩形区域,程序可以使用列表框的Canvas属性来绘制图片。
两个例子

1在IDE环境下,选择“文件-新建”,双击对话框中的“组件”,会出现“新建组件”对话框。在祖先类型中选择“TCustomListBox ”,在类名中输入“TImageListBox ”,点击创建Uints生成一个类框架。

2将以下成员添加到头文件(ImageListBox.h)中的相应字段:

private:
graphic::TG graphic * tmpggraphic;
protected:
void _ _ fastcall MyDrawItem(twin Control * Control,int Index,const Trect &Rect,TOwnerDrawState State);
void _ _ fast call MyMeasureItem(twin Control * Control,int Index,int & Height);
public:
_ _ fast call TImageListBox(t component * Owner);
_ _ fast call ~ TImageListBox();
void _ _ fastcall AddImage(System::an signing Filename,System::and String * String);

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 使用C++Buider制作自绘画列表框

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情