|
VCL에 대해 알아가게 되면
이미 잘 만들어진 class 및 utils들이 있는것을 알게될겁니다.
원하시는 그래픽 클래스에 TCanvas라는게 있죠..
각설하고
일단 TPaintBox는 Graphics Control입니다.
Handle이 없습니다.
DC는 PaintBox1->Canvas->Handle이 DC가 됩니다.
아래처럼 쓰시면 됩니다.
//---------------------------------------------------------------------------
void __fastcall DrawLine(HDC dc,int x1,int y1,int x2,int y2)
{
MoveToEx(dc,x1,y1,NULL);
LineTo(dc,x2,y2);
}
//-----------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HDC dc=PaintBox1->Canvas->Handle;
DrawLine(dc,10,10,100,200);
}
//---------------------------------------------------------------------------
그리고 먼저 말했듯이 TCanvas라는 class에서 윈만한 기능은 깔끔하게 처리해줍니다.
아래와 같이 간단히....
void __fastcall TForm1::Button2Click(TObject *Sender)
{
PaintBox1->Canvas->MoveTo(20,30);
PaintBox1->Canvas->LineTo(200,300);
}
//---------------------------------------------------------------------------
android 님이 쓰신 글 :
: VC의 PictureBox와는 많이 다른것같아서 많이 헤매는중입니다.
:
: 그래픽 클래스를 만들려고합니다.
: Unit파일을 생성하고
: class MyGrp {
: public:
: void DrawLine( ??, int x, int y, int x2, int y2);
: };
:
: 이렇게하고 안에 채워넣으면 되겠죠.
: ?? 부분은 DC를 넣어야겠죠.
:
:
: TPaintBox를 사용할려고하는데
: PaintBox1->Handle이 없어서 값을 넘겨주질 못하고 있습니다.
:
: void __fastcall TForm1::FormPaint(TObject *Sender)
: {
: HDC hDC;
: hDC = GetDC(PaintBox1->Handle); // 이 부분이 안되거든요.
: myGrp.DrawLine(hDC, 0, 0, 100, 100);
: }
:
: VC라면 그냥 CDC나 HDC를 넘겨주면 되는데 어떻게해야하나요?
|