|
제가 알기로는 Handle만 가지고는 class의 객체포인터를 찾을수 없는걸로 알고있습니다.
[의문 1 ]
그런데 꼭 Handle을 넘겨야 하나요?
TForm *를 넘기면 안되나요?
CreateSubForm(Form1); //TForm *를 인자로 넘기기
void CreateSubForm(TForm *frmOwner)
{
TForm *frm=new TForm(frmOwner);
frm->Parent=frmOwner;
frm->Show();
}
위와같이 하면 안되나요?
만약 보내는 쪽이나 또는 받는 쪽에서 TForm*형을 알수 없다면
void *로 넘기면 되는데...
void CreateSubForm(void *frmOwner) //void *로 받는경우
{
TForm *frm=new TForm((TForm *)frmOwner);
frm->Parent=(TForm *)frmOwner;
frm->Show();
}
[답변 1]
//Call...
CreateSubForm(Form1->Handle);
TForm *frm
void CreateSubForm(HWND hWnd)
{
frm=new TForm(NULL);
frm->ParentWindow=hWnd; //이렇게 하면 넘겨온 핸들위에 폼이 생성됩니다.
frm->Show();
//핸들이 TPanel이어도 되고 ... 어떤것이든 윈도우 핸들이면 됩니다.
}
또는
TForm *frm
void CreateSubForm(HWND hWnd) //
{
frm=new TForm(hWnd); //핸들만 맞으면 됩니다....
frm->Show();
}
그런데 위와같이 하는 경우 Form의 Owner가 설정되는 것은 아니고 Parent로 설정되는것이므로
Parent를 명시적으로 지정해줄 필요는 없지만
프로그램이 종료할때는 Ownert가 없어질때 자동으로 delete되지 않습니다.
코딩으로 delete해줘야합니다.
TForm *를 넘기는 경우는 delete해주지 않구요
우리 님이 쓰신 글 :
: 안녕하세요 한가지 궁금한게 있어서 이렇게 문의합니다.
:
: Form 을 생성하면
:
: Form->Handle 이 있자나요..
:
: 그런데 이 핸들을 가지고 다시 Form 의 포인터 (TComponent *) 를 얻어낼 수 없을 까요?
:
: 어떤 함수에서 Form->Handle 를 인자로 받습니다.그런데 내부에서
:
: Form 을 Parents로 하는 Form을 다시 생성해야하는데 Form->Handle 을 가지고
:
: 알아내기가 힘드네요.. 뭔가 있을것 같은데..
:
: 고수님들 한 수 부탁합니다.~
|