深入C++ Builder之编写自己的元件-深入分析VCL继承、消息机制(2)
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-30
s { void __fastcall PACKAGE Register() //包的注册函数 { TComponentClass classes[1] = {__classid(TVecCanvas)}; RegisterComponents("Draw Suite", classes, 0); } } //--------------------------------------------------------------------------- __fastcall TVecCanvas::~TVecCanvas() { //TODO: Add your source code here delete ShapeList; } void __fastcall TVecCanvas::MouseDown(TMouseButton Button, Classes::TShiftState Shift, int X, int Y) { //TODO: Add your source code here if(Button!=mbLeft) return; switch(FTool) { case ttLine: LastPos.x=X; LastPos.y=Y; NewPos.x=X; NewPos.y=Y; Down=true; case ttSelect: { int sh=ShapeAtPos(X,Y); if(sh!=-1) DoShapeSelected(sh); break; } } } void __fastcall TVecCanvas::MouseUp(TMouseButton Button, Classes::TShiftState Shift, int X, int Y) { //TODO: Add your source code here Down=false; if(Button==mbLeft) { switch(FTool) { case ttLine: CShape* sh= new CLine(); sh->Start=LastPos; sh->End=TPoint(X,Y); sh->Type=stLine; ShapeList->Add(sh); Canvas->MoveTo(LastPos.x,LastPos.y); Canvas->LineTo(X,Y); break; } } } void __fastcall TVecCanvas::MouseMove(Classes::TShiftState Shift, int X, int Y) { //TODO: Add your source code here if(!Down) { int sh=ShapeAtPos(X,Y); if(sh!=-1) DoHoverShape(sh); return; } switch(FTool) { case ttLine: Canvas->Pen->Mode=pmNotXor; Canvas->MoveTo(LastPos.x,LastPos.y); Canvas->LineTo(NewPos.x,NewPos.y); NewPos=TPoint(X,Y); Canvas->MoveTo(LastPos.x,LastPos.y); Canvas->LineTo(NewPos.x,NewPos.y); Canvas->Pen->Mode=pmCopy; break; } } void __fastcall TVecCanvas::Paint() //简单重载了Paint函数 { //TODO: Add your source code here //Canvas->Brush->Color=Color; //Canvas->FillRect(this->ClientRect); for(int n=0;n<ShapeList->Count;n++) { CShape* sh=(CShape*)ShapeList->Items[n]; sh->Draw(Canvas); } } void __fastcall TVecCanvas::DoHoverShape(int index) { //处理自定义事件 if(FOnHoverShape) { FOnHoverShape(this,index); } } int __fastcall TVecCanvas::ShapeAtPos(int x, int y) { //TODO: Add your source code here for(int n=0;n<ShapeList->Count;n++) { CShape* sh=(CShape*)ShapeList->Items[n]; if(sh->IsPartOf(TPoint(x,y))) return n; } return -1; } void __fastcall TVecCanvas::SetTool(ToolType value) { //TODO: Add your source code here if(FTool!=value) { FTool=value; } } void __fastcall TVecCanvas::DoShapeSelected(int index) { //TODO: Add your source code here if(FOnShapeSelected) { FOnShapeSelected(this,index); } } 上面的代码基本上运用了上面的消息处理知识和绘制的知识,所以很容易看懂,注意 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 读磁片磁区下一篇: Unicode宽字节字符集
关于深入C++ Builder之编写自己的元件-深入分析VCL继承、消息机制(2)的所有评论