티스토리 뷰

목표 : 모달리스 다이얼로그를 띄워서 부모 다이얼로그 안에 부착시키는 작업

소주제 : 부모 다이얼로그 크기 변경 시에 모달리스 다이얼로그 내부 컨트롤 크기도 따라 조정(ListBox)

Visual Studio 2012


1. 모달리스 다이얼로그 내부 리스트 박스 생성


2. 리스트박스 컨트롤변수 생성

 * 대화상자 편집에서 만든 리스트 박스 마우스 오른쪽 클릭 - 변수 추가


3. WM_SHOWWINDOW 메시지 처리기 추가

* 프로젝트 - 클래스 마법사 - 클래스 이름(CDialog1) - 메시지탭 - WM_SHOWWINDOW 처리기 추가


4. OnShowWindow에 코드 추가

// Dialog1.cpp : 구현 파일입니다.
//

void CDialog1::OnShowWindow(BOOL bShow, UINT nStatus)
{
	CDialogEx::OnShowWindow(bShow, nStatus);

	// TODO: 여기에 메시지 처리기 코드를 추가합니다.
	CRect listRect;
	m_list.GetWindowRect(&listRect);
	ScreenToClient(&listRect);

	CRect clientRect;
	GetClientRect(&clientRect);
	listRect.right = clientRect.right - 15;
	listRect.bottom = clientRect.bottom - 15;

	m_list.MoveWindow(listRect);
}


5. 부모 다이얼로그에 OnSize에 코드 추가

// ModelessDDlg.cpp : 구현 파일
//
void CModelessDDlg::OnSize(UINT nType, int cx, int cy)
{
	CDialogEx::OnSize(nType, cx, cy);

	// TODO: 여기에 메시지 처리기 코드를 추가합니다.
	//부모 다이얼로그 좌표 구하기
	CRect rectParent;
	this->GetClientRect(&rectParent);
	
	if(m_dlg1->IsWindowVisible())	//모달리스 다이얼로그 활성화시에만 적용
	{
		if(m_dlg1->GetSafeHwnd())
		{
			m_dlg1->SetWindowPos(NULL,rectParent.left+10,rectParent.top+130,rectParent.Width()-20,rectParent.Height()-10-130,NULL);
			m_dlg1->ShowWindow(SW_SHOWNA);	//창 변경에 따라 다이얼로그 내부 컨트롤도 크기 조절하여 다시 표시
		}
	}
}


댓글