다이얼로그 베이스로 만들 경우 리사이즈를 지원할 때 상당히 괴로운 노가다성 코드가 많이 필요합니다.

하지만 아래의 매니징 클래스(코드프로젝트)를 이용하면 상당히 편하게 작업을 할 수 있습니다.
먼저 첨부된 cpp, h 파일을 프로젝트에 add files 로 첨부 합니다.
 
그리고 다이얼로그 클래스의 h 파일에 부모 클래스인 CDialog 를 ETSLayoutDialog 로 바꿈니다.
그리고 cpp 파일에도 일괄적으로 바꿈니다.
(첨부된 파일 이름이 ETSLayout.cpp, ETSLayout.h 입니다.)
 
마지막으로 할 일은 보통 다이얼로그의 초기화 작업을 하게 되는 OnInitDialog 함수에 다이얼로그에 들어가는
 
컨트롤 ID, 혹은 컨텍스트일 경우 pWnd 를 등록시켜주기만 하면 됩니다.
 
아래의 그림을 참조해서 설명드리겠습니다.

사용자 삽입 이미지

위와 같이 다이얼로그가 있따면 IDC_NEW_ITEM_STATIC 은 사이즈 변화시 고정이고, IDC_NEW_ITEM (입력박스) 은 가로방향이 늘어나야 되겠고,
IDC_ITEM_LIST (리스트박스) 는 가로 세로에 다 늘어나야 되겠지요? 아마도 그럴 껍니다.
 
그럼 OnInitDialog 에 아래와 같이 초기화 작업을 합니다.
 
//-----------------------------------------
// Layout 초기화 작업
//-----------------------------------------
 
 CreateRoot(VERTICAL)
  << item ( IDC_NEW_ITEM_STATIC, NORESIZE )
  <<  ( pane(HORIZONTAL, ABSOLUTE_VERT )
   << item( IDC_NEW_ITEM, GREEDY )
   << item( IDC_ADD_ITEM, NORESIZE )
   )
  << item ( IDC_ITEM_LIST_STATIC, NORESIZE )
  << item ( IDC_ITEM_LIST, GREEDY )
 
  << ( pane(HORIZONTAL, ABSOLUTE_VERT )
   << item( IDOK, RELATIVE_HORZ, 70 )
   << item( IDCANCEL, RELATIVE_HORZ, 30 )
   );
 
 UpdateLayout();
 
//-----------------------------------------
// Layout 초기화 작업 끝
//-----------------------------------------
 
 
설명을 하자면 베이스 클래스 ETSLayoutDialog 에서는 스트림 "<<" 연산을 통해 레이아웃 아이템을 추가하도록 지원하고 있으니
".addItem" 처럼 해도 되지만 저 위에 것이 더 편하겠죠?
<< item() 은 베이스에 바로 아이템을 추가 하는 것이구요.
<< ( pane () ) 은 서브 레이아웃을 맹그는 것입니다.
 
컨트롤 ID 와 위치 지정 플래그를 위 처럼 작성하시면 완료 됩니다.
간단하죠?
플래그 종류는
 
  GREEDY                                  // 알고리즘 시간에 배우셨죠? 욕심쟁이 그리디 입니다. 말그대로 커지는대로 같이 가로 세로 다 커지는 플래그 입니다.
  ABSOLUTE_HORZ                    // 가로는 고정
  RELATIVE_HORZ                     // 상대적으로 가로 증가
  ABSOLUTE_VERT                    // 세로는 고정
  RELATIVE_VERT                      // 상대적으로 세로 증가
  NORESIZE                              // 가로 세로 다 fix , 보통 버튼 같은 경우죠 ^^
  ALIGN_LEFT                            // 고정 부분이 있을 경우 배치를 왼쪽으로 합니다.
  ALIGN_RIGHT                          // 오른쪽 배정
  ALIGN_TOP                             // 위로 배정
  ALIGN_BOTTOM                     // 아래로 배정
  ALIGN_HCENTER                    // 가로 중간으로 배정
  ALIGN_VCENTER                     // 세로 중간으로 배정
  ALIGN_CENTER                       // 가로세로 중간 배정
  ALIGN_FILL_HORZ
  ALIGN_FILL_VERT
  ALIGN_FILL

 
와 같습니다.
 
컴팔해서 실행해 보시면 아래의 그림과 같이 나타납니다.
기타 자세한 사항을 알고 싶으시면 아래의 주소를 참조해주세요.
 
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기