您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > BCB > 正文
C++Builder中集合的处理
[文章信息]
作者:
时间:2002-11-11
出处:C++Builder园地
责任编辑:
[文章导读]
SETEXP程序可以显示在单击鼠标时,是否按下了Shift键或Ctrl键,还可以显示用户按下 的是鼠标左键还是右键......
advertisement
热点推荐
· 闪客五周年作品展:灵光1999
· 10.18精选 Win2003共享打印
· Messenger Plus!新功能体验
· 专业的魅力:图层的使用
· 金山文字2003中对文档进行页面设置
[正文]

   首先看一看窗口的MouseDown事件的声明

 

 



 

 

 

 

void __fastcall TForm1::FormMouseDown(TObject *Sender,TMouseButton Button,TShiftState Shift,int X,int Y)

  其中的Shift参数被说明为TShiftState类型:

enum Classes_1{ssShift,ssAlt,ssCtrl,ssRight,ssMiddle,ssDouble};

typedef SetTShiftSTate;

  TShiftSTate是一个集合(Set),也就是说,TShiftState是Sysdefs.h中Set模板类的一个实例。如果想要知道某个元素是不是集合中的一个成员,可以使用Contains方法:

ShiftKey->Checked=Shift.Contains(ssShift);

ControlKey->Checked=Shift.Contains(ssCtrl);

LeftButton->Checked=Shift.Contains(ssLeft);

RightButton->Checked=Shift.Contains(ssRight);

  这段代码询问元素ssRight是不是属于Shift集合。如果是的话,那么代码就设置为TCheckBox组件的状态。

  下面是在运行状态下说明一个集合的方法:

TShiftState LeftShift;

LeftShift<

  对于上面这个集合,如果询问集合中是否包含ssLeft或ssShift, 那么Contains运算符将返回True值。

  除了Contains方法外,还可以在Set类中使用下面三个运算符:

  + 并集

  - 差集

  * 交集

  上面这三个运算符都返回一个集合,而Contains返回一个布尔值。

  SETEXP程序

  如下面程序清单所示,SETEXP程序说明了如何使用Set模板类中的关键元素。

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

// File: Main.cpp

// Project: SetExp

// Creator: Copyright 1998 by Charlie Calvert

//

#include

#pragma hdrstop

#include "Main.h"

#pragma resource "*.dfm"

TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void TForm1::CheckState(TShiftState Shift)

{

ShiftKey->Checked = Shift.Contains(ssShift);

ControlKey->Checked = Shift.Contains(ssCtrl);

LeftButton->Checked = Shift.Contains(ssLeft);

RightButton->Checked = Shift.Contains(ssRight);

}

void __fastcall TForm1::UnionClick(TObject *Sender)

{

AnsiString Operators[3] = {"+", "*", "-"};

TShiftState FinalSet;

TShiftState LeftShift;

TShiftState LeftCtrl;

LeftShift << ssLeft << ssShift;

LeftCtrl << ssLeft << ssCtrl;

switch (TOptType(dynamic_cast (Sender)->Tag))

{

case otUnion:

FinalSet = LeftShift + LeftCtrl;

break;

case otIntersection:

FinalSet = LeftShift * LeftCtrl;

break;

case otDifference:

FinalSet = LeftShift - LeftCtrl;

break;

}

CheckState(FinalSet);

Label2->Caption = Operators[dynamic_cast(Sender)->Tag];

}

void __fastcall TForm1::Label4MouseDown(TObject *Sender, TMouseButton Button,

TShiftState Shift, int X, int Y)

{

CheckState(Shift);

}

  SetExp程序说明了如何对集合进行访问和操作。尤其是程序中使用了TShiftState类型的集合。通过这个示例程序可以学习使用C++Builder集合所需的内容。

  SETEXP程序的主窗口包含了4个TCheckBox、2个TPanel、4个TLabel和3个TBitBtn对象。4个TCheckBox对象放置在第一个TPanel对象的上面,第4个TLabel对象放置在第二个TPanel对象的上面。

  SETEXP程序可以显示在单击鼠标时,是否按下了Shift键或Ctrl键,还可以显示用户按下 的是鼠标左键还是右键。代码中说明了如何使用交集、并集和差集运算符。


·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 盈通多款PCI-E显卡摆上柜台
  • 闪客五周年作品展:灵光1999
  • 10.18精选 Win2003共享打印
  • [配置推荐]7000元HL2游戏配置
  • FPS顶级秘密武器 Aqua3鼠标垫
  • Messenger Plus!新功能体验
  • 扶不起的国足 《PSOBB》足球赛
  • 另类魔兽争霸简史
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索