ResizeDialog는 Dialog가 Resize가 되어야 하고 내부 Control이 Dialog가 Resize가 될 때 Layout도 같이 자동으로 변경되는 것을 의미한다.
인터넷을 검색하면 _CWndDynamicLayout template framework class를 만들어서 사용하는 예제 (Common Controls.zip를 검색할 수 있는데 Xtreme Toolkit을 사용하면 좀더 편하게 작업을 할 수가 있다.
<참고, https://blog.naver.com/nanoteli/30025538987>
우선 Dialog를 생성한다. 그럼 MFC는 CDialog를 상속해서 만들어진다.
우리는 Xtreme Toolkit의 CXTPResizeDialog 클래스를 상속해서 만든다.
기본 생성한 Dialog의 클래스 이름이 TestDlg라면 아래와 같이 자동 제작이 된다.
class CconfigListDlg : public CDialog |
1. 먼저 stdafx.h에 XTToolkitPro.h를 include한다.
#include <XTToolkitPro.h> // Codejock Software Components |
2. 여기서 Parent Class를 CXTPResizeDialog로 변경을 한다.
class CTestDlg : public CXTPResizeDialog |
3. 생성자는 아래와 같이 변경한다.
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/) : CXTPResizeDialog(CTestDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } |
4. MESSAGE_MAP을 아래와 같이 변경한다.
BEGIN_MESSAGE_MAP(CTestDlg, CXTPResizeDialog) |
5. BOOL CTestDlg::OnInitDialog() 함수에 SetResize 함수를 이용해서 Control을 위치 시킨다.
아래와 같이 Dialog에 추가된 Control을 원하는 곳에 위치 시키면 된다.
SetResize(IDOK, XTP_ANCHOR_BOTTOMRIGHT, XTP_ANCHOR_BOTTOMRIGHT); SetResize(IDCANCEL, XTP_ANCHOR_BOTTOMRIGHT, XTP_ANCHOR_BOTTOMRIGHT); |
아래 내용은 xtpresizepoint.h에 있는 내용이다. 이것을 참고해서 SetResize 함수를 사용한다.
//----------------------------------------------------------------------- // Summary: // CXTPResizePoint constants used by the CXTPResize class for defining the // anchor position for a child in a resizable window. // Parameters: // XTP_ANCHOR_TOPLEFT - Specifies a top left position. // XTP_ANCHOR_TOPCENTER - Specifies a top center position. // XTP_ANCHOR_TOPRIGHT - Specifies a top right position. // XTP_ANCHOR_MIDDLELEFT - Specifies a middle left position. // XTP_ANCHOR_MIDDLECENTER - Specifies a middle center position. // XTP_ANCHOR_MIDDLERIGHT - Specifies a middle right position. // XTP_ANCHOR_BOTTOMLEFT - Specifies a bottom left position. // XTP_ANCHOR_BOTTOMCENTER - Specifies a bottom center position. // XTP_ANCHOR_BOTTOMRIGHT - Specifies a bottom right position. // Example: // The following example demonstrates the use of CXTPResizePoint. // <code> // // Set control resizing. // SetResize(IDC_EDIT_MASKEDIT, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPRIGHT); // SetResize(IDC_TXT_MASK, XTP_ANCHOR_TOPCENTER, XTP_ANCHOR_TOPRIGHT); // SetResize(IDC_LBOX_MASK, XTP_ANCHOR_TOPCENTER, XTP_ANCHOR_TOPRIGHT); // SetResize(IDC_BTN_UPDATE, XTP_ANCHOR_TOPCENTER, XTP_ANCHOR_TOPCENTER); // SetResize(IDC_EDIT_MASK, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPCENTER); // SetResize(IDC_EDIT_PROMPT, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPCENTER); // SetResize(IDC_EDIT_LITERAL, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPCENTER); // SetResize(IDC_EDIT_DEFAULT, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPCENTER); // SetResize(IDC_GBOX_PROPERTIES, XTP_ANCHOR_TOPLEFT, XTP_ANCHOR_TOPCENTER); // SetResize(IDCANCEL, XTP_ANCHOR_BOTTOMRIGHT, XTP_ANCHOR_BOTTOMRIGHT); // SetResize(IDOK, XTP_ANCHOR_BOTTOMRIGHT, XTP_ANCHOR_BOTTOMRIGHT); // </code> // See Also: // CXTPResize, CXTPResizeDialog, CXTPResizeFormView, CXTPResizeGroupBox, CXTPResizePropertyPage, CXTPResizePropertySheet, CXTPResizePoint, CXTPResizeRect //----------------------------------------------------------------------- |
'MFC' 카테고리의 다른 글
MFC Icon 만들기 (0) | 2018.05.23 |
---|---|
CListCtrl DeleteItem (0) | 2018.05.15 |
CTreeCtrl에서 SetItemData로 입력한 DWORD_PTR 삭제 방법 (2) | 2017.12.20 |
DLL, EXE 파일에 Version 정보 넣기 (0) | 2016.10.31 |
CryptGetUserKey() 함수 이용시 에러 발생시 확인 방법 (0) | 2016.09.30 |