|
이성제 님이 쓰신 글 :
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "Unit1.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: TForm *f;
: TLabel *l;
: TButton *b;
: int ct=1;
: #pragma resource "*.dfm"
: TForm1 *Form1;
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: if (Timer1->Interval == 0)
: {
: Timer1->Interval=100;
: }
: else
: {
: Timer1->Interval=0;
: }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button(TObject *Sender)
: {
: TButton *btn = (TButton*)Sender;
: TForm *frm = (TForm*)btn->Parent;
: frm->Tile();
: frm->Close();
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Timer1Timer(TObject *Sender)
: {
: f=new TForm(this);
: l=new TLabel(this);
: b=new TButton(this);
: f->Top=random(800);
: f->Left=random(1000);
: f->Width=169;
: f->Height=128;
: f->Caption=IntToStr(ct);
: l->Caption="사랑해♡";
: l->Width=57;
: l->Left=16;
: l->Height=13;
: l->Top=24;
: l->Parent=f;
: b->Caption="확인";
: b->Parent=f;
: b->Left=48;
: b->Top=56;
: b->Left=48;
: b->OnClick=Button;
: f->Show();
: ct++;
: }
: //---------------------------------------------------------------------------
:
:
:
:
:
:
:
: 소스가 이렇게 있는데요
: void __fastcall TForm1::Button(TObject *Sender)
: {
: TButton *btn = (TButton*)Sender;
: TForm *frm = (TForm*)btn->Parent;
: frm->Tile();
: frm->Close();
: }
:
: 이부분에 소스를 이해할수가 없습니다.
:
: 으흠..
:
: Tile() 이 하는 일이 뭔지..
:
: 아 아무튼 전혀 이해할수가 없습니다.
:
: 설명좀 해주세욥!!
버튼부만 설명해드림 되능건가용.....
C++ Builder의 최상위 클래스는 TObject지요
즉 빌더의 모든 클래스들은 TObejct를 기본적으로 상속하고 있다고 보시면 되는데요
버튼이나 폼역시 마찬가지 입니다.
버튼이 클릭되면 저 버튼클릭함수가 호출되어지죠?
그때 인자로 TObject *Sender를 주게되는데 이때 Sender의 값은 클릭된 버튼의 주소값이지요
Sender를 TButton으로 캐스팅하고 다시 TForm으로 캐스팅하는 문장입니다.
Tile() 함수는 말그대로 폼들을 타일 형태로 정열시키는 함수입니다.
중요하지 않고 그냥 그런가보다 하고 넘어가면 만사오키~
그냥 캐스팅부분이 더 중요할 것 같군요
TButton *btn = (TButton *) Sender; <- TObject의 형태인 버튼의 포인터를 TButton으로 캐스팅합니다.
TForm *frm = (TForm *) btn->Parent; <- Button의 부모를 TForm형태로 캐스팅합니다.
frm->Tile(); <- 자식들 윈도우를 타일 형태로 정열합니다.
frm->Close(); <- 폼을 종료하는건데요 이때 클릭된 버튼의 부모가 닫히겠네요
Tile()함수가 뭔지 모르셨던거라면 그냥 지나치시구요
캐스팅을 모르셨던거라면 C++ 책을 보시기 바랍니다.
위의 문장을 조금 줄여보자면
( (TButton *) Sender )->Parent->Tile();
( (TButton *) Sender )->Parent->Close();
이런식이지요
즐프하시구요 정말로 캐스팅에서 햇갈리신거라면 C++책을 꼭 보시기 바랍니다.
|