C++ Builder/TCanvas > Form에 그리거나 TImage에 그릴지에 따라 처리 변경

운영 환경
C++ Builder XE4

TCanvas를 사용하여 그릴 때 다음 두 가지 방법이 적어도 있습니다.
  • Form에 그리기
  • TImage에 그리기

  • Unit1.cpp
    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::drawOnImage(void)
    {
        TRect R = Image1->ClientRect;
    
        //            X1      Y1     X2       Y2        X3       Y3     X4      Y4
        Image1->Canvas->Chord(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);
        Image1->Canvas->Brush->Color = clBlue;
    
        long hormid = (R.Left + R.Right) / 2;
        Image1->Canvas->FloodFill(hormid, R.Top + 5, clBlack, fsBorder);
    }
    
    void __fastcall TForm1::drawOnForm(void)
    {
        TRect R = this->ClientRect;
    
        //            X1      Y1     X2       Y2        X3       Y3     X4      Y4
        this->Canvas->Chord(R.Left, R.Top, R.Right, R.Bottom, R.Right, R.Top, R.Left, R.Top);
        this->Canvas->Brush->Color = clBlue;
    
        long hormid = (R.Left + R.Right) / 2;
        this->Canvas->FloodFill(hormid, R.Top + 5, clBlack, fsBorder);
    }
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        drawOnForm();
        //drawOnImage();
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormPaint(TObject *Sender)
    {
        //drawOnForm();
        drawOnImage();
    }
    //---------------------------------------------------------------------------
    

    상기의 코드를 사용해 조사한 결과가 이하.
  • Form에 그리기
  • FormPaint ()로 렌더링 처리하지 않으면, 은폐로부터의 복귀시에 렌더링하지 않습니다.
  • 폼 생성시에 FormPaint ()는 문제 없다

  • TImage에 그리기
  • FormPaint ()로 렌더링 처리하지 않아도, 은폐로부터의 복귀시에도 렌더링됩니다.
  • FormPaint ()로 렌더링하면 폼 생성시에 Button1이 정상적으로 렌더링되지 않습니다 (이하).


  • 좋은 웹페이지 즐겨찾기