음...
Parent라는것은 VCL의 TControl 상속받은 놈에게만 있는 property입니다.
만약 vc에 어떤 class에 있다고 하더라도.. 동작이 다르기 때문에 ...
parent를 설정한다고 해서 되는것이 아닙니다.
Parent는 반드시 vcl의 TWinControl을 상속받은 놈을 parent로 설정해야합니다.
강제 cast로 되는게 아니죠
대신 VC++에서 만든 parent가 될놈이 분명히 window라면
win32-api 인 SetParent 라는 api를 이용해서 parent를 설정할수 있구요
아니면 ParentWindow라는 프로퍼티가 TFrame에 있는데..
ParentWindow에 윈도우Handle을 연결해주면
SetParent로 parent를 설정한것과 같이 됩니다.
frameDLL_VC->ParentWindow = pParent;
그럼..
이용태 님이 쓰신 글 :
: 빌더에서 만든 DLL(프레임-각종 VCL 라이브러리, 컴포넌트를 담고 있음)을 VC++에 올려서 사용하는 방법을 찾아보다가 "Lyn"님의 답변과 C++ 빌더 포럼 강좌/문서 게시판을 뒤져.. "김태선"님이 쓰신 글을 참고하여(
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=143)
: 어케어케 VC++에서 불러다가 쓸 수 있게 하였습니다.
:
: 테스트는 빌더에서 폼을 하나 만들고 그 폼을 DLL로 변환해서 VC++에서 호출하는 식으로 했습니다.
: VC++ MFC 어플과 함께 별도의 창으로 폼이 뜹니다. 잘됩니다..;;
:
: 그런데 요것을 폼이 아닌 프레임으로 해서 VC++의 다이얼로그 박스내에 동적으로 올려놓고 싶습니다.
: 빌더에선 Frame의 생성자에 부모 원도우를 지정만 하면 부모 원도우내에 Frame이 올라가곤 했습니다.
: 그런데 VC++에선 이것을 어떻게 해야 할지 모르겠습니다.
:
: VC에서 빌더에서 프레임을 만들도록 하고 부모원도우를 VC 다이얼로그로 지정할려고 했는데 코드는 에러없이 돌아가는데 실행시 문제가..;;;
:
:
: //요기는 VC++ 코드입니다.
: p->CreateFrame((unsigned long*)this); //this 다이얼로그를 가리키는거 같습니다.
: 또는
: p->CreateFrame((unsigned long*)this->hInst);
:
: -------------------------------------------------------------------
: //요기는 빌더쪽 코드
: void __stdcall CreateFrame(unsigned long *pParent)
: {
: //frameDLL_VC = new TFrame3((TWinControl*)pParent);
: frameDLL_VC = new TFrame3(Application);
:
: ((TWinControl*)frameDLL_VC)->Parent = (TWinControl*)pParent;
: }
: -------------------------------------------------------------------
:
: 이렇게 하면 내부적으로 Frame은 동적으로 생성이 되는거 같은데,
:
: 프레임의 부모를 지정하는 곳에서 문제가 생기는거 같습니다.
:
: VC++의 특정 컨트롤(다이얼로그가 될수도 있고, SDI, MDI View 위일수도 있습니다..) 위에 Frame을 위치시킬려면 어떻게 해야 할까요?
:
:
: 그리고 추가로.. CreateFrame 함수 내에 TFrame3 동적으로 생성할 경우 Application이 아닌 넘어온 부모 원도로 지정하는 방법은 어떻게 될까요?