내부 컨트롤 크기 조절

예갈조·2024년 12월 5일

Tumor Track Project

목록 보기
5/25

문제


  • 다이얼로그 사이즈 변경 시, 내부 컨트롤이 잘림

    → 다이얼로그의 크기가 조절될 때, 내부에 위치한 컨트롤의 위치 및 크기도 다이얼로그의 크기에 맞게 함께 조절되도록 수정하고 싶음



해결 과정


  • 대화 상자가 resizing 될 때 발생하는 메시지인 WM_SIZE의 핸들러를 추가하여 대화상자 resizing 시, 위치(크기)를 변경하고 싶은 컨트롤에 대한 위치(크기) 조절 작업을 추가해주면 됨
  • 코드
    void CTreeCtrlDlg::OnSize(UINT nType, int cx, int cy)
    {
    	CDialog::OnSize(nType, cx, cy);
    
    	CWnd* pCtl = GetDlgItem(IDC_STATIC_IMAGE2);
    
    	if (!pCtl) { return; }
    
    	CRect rectCtl;
    	pCtl->GetWindowRect(&rectCtl);
    	ScreenToClient(&rectCtl);
    
    	pCtl->MoveWindow(rectCtl.left, rectCtl.top, cx - 2 * rectCtl.left, cy - rectCtl.top - rectCtl.left, TRUE);
    
    	return;
    }



결과


  • 위의 방법에서 다음과 같은 문제가 발생
    • 개별 컨트롤의 크기 변경은 잘 동작하지만, 다이얼로그 내 모든 컨트롤을 한 번에 조정하려는 시도에서 일부 컨트롤(Group Box, Static Control)의 크기와 위치가 변경되지 않는 현상
    • 해당 컨트롤의 크기 및 위치를 동적으로 수정하기 위해서 폰트 크기, 위치를 조정하는 방법은 비효율적이라고 생각함
    • 이러한 문제로 인해 크기 조정 기능을 유지하는 것보다 다이얼로그 크기를 고정하여 불필요한 복잡성을 제거하는 것이 더 나은 방향이라고 판단함



To do


  • 다이얼로그 크기 고정하는 코드로 변경하기
    • 유지보수성과 안정성을 모두 향상시킬 수 있는 현실적인 해결책





참고링크

[MFC] 대화상자 크기 조절 시 대화 상자 내에 위치한 컨트롤의 크기(위치)도 함께 변경하는 방법!

[MFC] 다이얼로그 창 크기 변화에 따른 컨트롤 사이즈 자동 조절

0개의 댓글