C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[46471] Re:TWinControl 로부터 Form 포인터 알아내기...
장성호 [nasilso] 1015 읽음    2006-09-07 14:55
제가 알기로는 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 을 가지고
:
: 알아내기가 힘드네요.. 뭔가 있을것 같은데..
:
: 고수님들 한 수 부탁합니다.~

+ -

관련 글 리스트
46466 TWinControl 로부터 Form 포인터 알아내기... 우리 813 2006/09/07
46471     Re:TWinControl 로부터 Form 포인터 알아내기... 장성호 1015 2006/09/07
46473         Re:Re:답변 정말 감사합니다.~ 우리 769 2006/09/07
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.