⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c13_4f.cpp

📁 C++Builder编程实例详解,用具体的例子阐明C++的一些基本操作,所有程序均在BC++上编译过.可靠,建议下载
💻 CPP
字号:
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop

#include "C13_4f.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{ // 构造函数
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ExitClick(TObject *Sender)
{
    Close(); // 关闭当前窗体
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LStyle2Click(TObject *Sender)
{
    TMenuItem *p = (TMenuItem*)Sender;
    LineStyle = psDash; // 该设置只有在线宽(Width)
                        // 为“1”时有效,
                        // 如果Pen->Width>1,将忽略该设置
                        // 并使用缺省的实线。
    p->Checked = true;
    OneClick(Sender); // 设置线宽
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LStyle1Click(TObject *Sender)
{
    TMenuItem *p = (TMenuItem*)Sender; // 指针类型转换
    LineStyle = psSolid; // 实线
    p->Checked = true; // 设置菜单选择
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LStyle3Click(TObject *Sender)
{
    TMenuItem *p = (TMenuItem*)Sender; // 指针类型转换
    LineStyle = psDashDot; // 点划线,
                           // 该设置只有在Pen->Width=1时有效。
    p->Checked = true; // 设置菜单
    OneClick(Sender); // 设置线宽(为1)
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LStyle4Click(TObject *Sender)
{
    TMenuItem *p = (TMenuItem*)Sender; // 指针类型转换
    LineStyle = psDashDotDot; // 双点划线
                              // 该设置只有在Pen->Width=1时有效。
    p->Checked = true; //设置菜单选择
    OneClick(Sender); // 设置线宽
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OneClick(TObject *Sender)
{
    LineWidth = 1; // 设置线宽
    One->Checked = true; // “选择”菜单
    sOne->Down = true;   // “按下”按钮
}
//---------------------------------------------------------------------------
void __fastcall TForm1::TwoClick(TObject *Sender)
{
    LineWidth = 2; // 设置线宽
    Two->Checked = true; // “选择”菜单
    sTwo->Down = true;   // “按下”按钮
    LineStyle = psSolid; // 设置线形(为实线)。
    LStyle1->Checked = true; // 设置线形菜单显示
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ThreeClick(TObject *Sender)
{
    LineWidth = 3; // 设置线宽
    Three->Checked = true; // “选择”菜单
    sThree->Down = true;   // “按下”按钮
    Image1->Canvas->Pen->Style = psSolid; // 设置线形(为实线)。
    LStyle1->Checked = true; // 设置线形菜单显示
    LineStyle = psSolid; // 设置线形(为实线)。
    LStyle1->Checked = true; // 设置线形菜单显示
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FiveClick(TObject *Sender)
{
    LineWidth = 5; // 设置线宽
    Five->Checked = true; // “选择”菜单
    sFive->Down = true;   // “按下”按钮
    LineStyle = psSolid; // 设置线形(为实线)。
    LStyle1->Checked = true; // 设置线形菜单显示
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
    Image1->Canvas->Refresh(); // 强制刷新画布
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BlackClick(TObject *Sender)
{
    Black->Checked = true; // “选择”菜单
    sBlack->Down = true; // “按下”按钮
    LineColor = clBlack; // 设置笔颜色为黑色

}
//---------------------------------------------------------------------------
void __fastcall TForm1::RedClick(TObject *Sender)
{
    Red->Checked = true; // “选择”菜单
    sRed->Down = true; // “按下”按钮
    LineColor = clRed; // 设置笔颜色为红色

}
//---------------------------------------------------------------------------
void __fastcall TForm1::BlueClick(TObject *Sender)
{
    Blue->Checked = true; // “选择”菜单
    sBlue->Down = true;   // “按下”按钮
    LineColor = clBlue; // 设置笔颜色为蓝色

}
//---------------------------------------------------------------------------
void __fastcall TForm1::GreenClick(TObject *Sender)
{
    Green->Checked = true; // “选择”菜单
    sGreen->Down = true; // “按下”按钮
    LineColor = clGreen; // 设置笔颜色为绿色

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button,
	TShiftState Shift, int X, int Y)
{
    if(!Step)
    {  // 输入第一个点
        Step = 1;
        X1 = X; // 保存端点位置
        Y1 = Y;
        SetXor(); // 设置异或状态
        DrawCross(Image1->Canvas, X1, Y1);
    }
    else if(Step == 1)
    {  // 输入第二个点
        Step = 2;
        X2 = X3 = X;
        Y2 = Y3 = Y;
        DrawCross(Image1->Canvas, X2, Y2);
        DrawArc();
    }
    else
    {  // 输入第三个点
        Step = 0;
        DrawArc();
        DrawCross(Image1->Canvas, X1, Y1);
        DrawCross(Image1->Canvas, X2, Y2);
        X3 = X;
        Y3 = Y;
        RestoreSet();
        DrawArc();
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    Step = 0; // 初始化
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
	int X, int Y)
{
    if(Step == 2) // 判断输入点状态
    {             // 等于2为动态画线状态
        DrawArc(); // 擦
        X3 = X; // 修改点位置
        Y3 = Y;
        DrawArc(); // 画
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SetXor()
{
    // 设置异或状态
    Image1->Canvas->Pen->Color = clWhite; // 设置笔为白色,
                                          // 缺省时为黑色,黑色不能用于异或色。
                                          // 因为黑色为全零,异或后画布不变色,
                                          // 不能看到绘图结果。
    Image1->Canvas->Pen->Style = psSolid;
    Image1->Canvas->Pen->Width = 1;
    Image1->Canvas->Pen->Mode = pmXor;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RestoreSet()
{
    // 恢复设置
    Image1->Canvas->Pen->Color = LineColor;
    Image1->Canvas->Pen->Style = LineStyle;
    Image1->Canvas->Pen->Width = LineWidth;
    Image1->Canvas->Pen->Mode = pmCopy;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DrawArc()
{
    long xx1 = X1*X1; // X1的平方
    long yy1 = Y1*Y1; // ...
    long xx2 = X2*X2; // ...
    long yy2 = Y2*Y2; // ...
    long xx3 = X3*X3; // ...
    long yy3 = Y3*Y3; // ...
    long A = xx3+yy3-xx1-yy1;
    long B = xx2+yy2-xx1-yy1;
    long A1 = (X3-X1)*(Y1-Y2);
    long B1 = (X2-X1)*(Y1-Y3);
    float A_B= A1==B1?0.0001:A1-B1;
    float x0, y0; // 圆心坐标
    float r; // 半径

    if((X1 != X2 || Y1 != Y2) &&
       (X1 != X3 || Y1 != Y3) &&
       (X2 != X3 || Y2 != Y3)) // 输入点不重合
    {
        x0 = (A*(Y1-Y2)-B*(Y1-Y3)) /
             (2*A_B); // 计算圆心的X坐标
        y0 = (A*(X2-X1)-B*(X3-X1)) /
             (2*A_B); // 计算圆心的Y坐标

        r = sqrt((X1-x0)*(X1-x0)+(Y1-y0)*(Y1-y0));
        float k1 = (X2-X1)==0?0.1:(X2-X1);
        float k2 = (X3-X2)==0?0.1:(X3-X2);
        if((((Y3-Y2)/k2)-((Y2-Y1)/k1))*(X3-X2)*(X2-X1) <0)
        {  // 判断起始点和终止点
            Image1->Canvas->Arc(x0-r, y0-r, x0+r, y0+r,
                            X1, Y1, X3, Y3);
        }else
        {
            Image1->Canvas->Arc(x0-r, y0-r, x0+r, y0+r,
                            X3, Y3, X1, Y1);
        }
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DrawCross(TCanvas *p, long X, long Y)
{// 绘制箭头
    p->MoveTo(X-10, Y);
    p->LineTo(X+10, Y);
    p->MoveTo(X, Y-10);
    p->LineTo(X, Y+10);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -