

→ 다이얼로그 사이즈를 조정하여도 화면이 다 보였으면 좋겠음
WM_SIZE 메시지 처리하기WM_SIZE: 윈도우창의 크기가 변경되고 나서 발생하는 메시지. 호출되는 함수는 OnSize()OnSize() 메시지 사용해도 상관없을 것 같아서 계속 해당 메소드에서 수정 진행OnInitDialog(): 초기 화면 크기 세팅함SetWindowPos() 사용아직 내부 컨트롤 크기 조절 코드 작성 전

무한 크기 재조정
SetWindowPos()를 호출하면서 OnSize()가 재귀적으로 호출되었을 가능성→ SetWindowPos() 재귀 호출 방지
SetWindowPos 함수는 창의 크기와 위치를 변경WM_SIZE 메시지가 다시 발생하며, OnSize가 재차 호출SetWindowPos 내부에서 변경한 크기와 다시 계산된 크기가 일치하지 않으면, OnSize가 계속 호출되어 무한 재귀 호출이 발생할 수 있음isResizing 플래그는 OnSize가 재귀적으로 호출되지 않도록 제어
재귀 호출을 방지하기 위해, SetWindowPos를 호출하기 전에 isResizing 값을 true로 설정하고, 함수 실행이 끝난 후에는 다시 false로 되돌리기
// 다이얼로그 비율 고정
void CTreeCtrlDlg::OnSize(UINT nType, int cx, int cy)
{
static bool isResizing = false; // 재귀 방지 플래그
if (isResizing)
return;
CDialogEx::OnSize(nType, cx, cy);
// 최소화 상태 처리하지 않음
if (nType == SIZE_MINIMIZED || cx <= 0 || cy <= 0)
return;
isResizing = true; // 재귀 호출 방지
// 비율 유지: 너비를 기준으로 높이를 계산
int newHeight = static_cast<int>(cx / m_dialogRatio);
// 크기 조정
SetWindowPos(NULL, 0, 0, cx, newHeight, SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
isResizing = false; // 재귀 호출 방지 해제
}
내부 컨트롤 사이즈 변경
기본 다이얼로그의 최소, 최대 사이즈 지정