|
Window Application은 대부분 Parent를 가지고 있습니다.
보통 프로그램에 Main윈도우는 Parent가 Desktop이 되죠
Parent가 Desktop인 윈도우는 작업표시줄에 나타나구요
다시 말해 어떤 윈도우든 (Window Handle을 가진 모든 Control)은 Parnet 설정을 바꿈으로써
어디에든 나타낼수 있습니다.
예를들어 메모장(Notepad.exe)을 현재 프로그램의 Panel에 올리고 싶다면
[과정]
1. 대상프로그램의 핸들을 찾습니다.
HWND hWnd = FindWindow("","제목없음 - 메모장");
2. 찾았으면 SetParent로 메모장의 Parent를 Panel1->Handle로 변경해 줍니다.
SetParent(hWnd , Panel1->Handle) ;
[샘플]
아래와 같이하면 바탕화면이 내 폼안에 들어와 버립니다.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HWND hWnd = FindWindow("Progman", NULL);
HWND hWndLView = FindWindowEx(hWnd, 0, "SHELLDLL_DefView", NULL);
HWND hWndParent = GetParent(hWndLView);// Windows.GetParent(H); 원래 original Parent
::SetParent(hWndParent, this->Handle);
}
//---------------------------------------------------------------------------
이는 탐색기 프로그램인 explore.exe를 통째로 내 프로그램에 넣는것이 아니라
탐색기에서 바탕화면만 내 프로그램에 넣는것입니다.
위 과정을 반복하면 여러개 프로그램을 내 프로그램에 넣는것도 문제 없겠죠
그럼
무한질주 님이 쓰신 글 :
: 제가 ..
:
: 프로그램안에서 다른 프로그램 보여주려고 하고 있습니다.
:
: 버튼을 클릭하면 폼안에 특정프로그램이 Child윈도우로 생성이 되는 것이지요..
:
: 또 버튼을 클릭하면 또 생기고... 이런식으로 같은 프로그램으로 여러개의 Child윈도우로 생성시켜보려고 합니다.
:
: 어떤식으로 해야할까요?
|