티스토리 뷰

다이얼로그를 생성한 후에 Style 속성을 보면


다음과 같이 3가지의 속성이 있다. (Overlapped, Popup, Child)


Overlapped 와 Popup은 부모를 벗어나 새로운 다이얼로그를 띄운다.


다이얼로그를 띄울 때 차이점이 생기는데,


Overlapped는 Dialog Frame을 가지고 생성이 되고,




Popup은 Dialog Frame이 없이 생성되는 것이 기본이다.


(단, Popup창도 Overlapped처럼 Dialog Frame을 가지고 생성할 수 있음.)



 

Child는 버튼 처럼 하나의 컨트롤로 인식되어 부모 내부에 종속하게 된다.


보통 popup과 child를 많이 사용하는데 여기서 차이점은


popup은 윈도우 전체화면을 활용할 수 있고, child는 부모 다이얼로그 내부에서만 움직일 수 있다


예) 버튼 클릭으로 각 속성의 다이얼로그를 띄울 때



void CModelessDDlg::OnBnClickedButton1()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	m_dlg1 = new CDialog1;
	m_dlg1->Create(IDD_DIALOG1);

	//부모 다이얼로그 좌표 구하기
	this->GetWindowRect(&rectParent);
	
	//속성 SW_CHILD시
	m_dlg1->SetParent(this);
	m_dlg1->SetWindowPos(NULL,10,130,rectParent.Width()-10,rectParent.Height()-10,NULL);

	//속성 SW_POPUP시
	//m_dlg1->SetWindowPos(NULL,rectParent.left+10,rectParent.top+130,rectParent.Width()-20,rectParent.Height()-10-130,NULL);
	
	m_dlg1->ShowWindow(SW_SHOW);
}


속성별 SetWindowPos 좌표(0,0)는 다음과 같다.


1) Child : 부모다이얼로그 내부 좌표 (0,0)

  - 따라서 SetWindowPos시 rectParent.left함수를 빌려오지 않고 부모 다이얼로그 내부에서 시작하기 때문에 10,130으로 값을 줄수있다.


2) Popup : 현재 윈도우 전체화면 좌표 (0,0)

  - 전체화면 좌표기 때문에 전체화면 에서 부모 다이얼로그의 좌표를 가지고 있는 rectParent에서 좌표를 구해서 거기에 추가로 더해야한다.


이 점만 유의해서 작업하면 될듯..




더 자세한 내용은 아래의 사이트를 참조 하면 된다.


http://moogi.new21.org/tc/1358

댓글