04-29 21:07
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[C/C++] MFC / Edit Control 박스 입력 가능 글자수 제한하기 본문

Programming/C&C++

[C/C++] MFC / Edit Control 박스 입력 가능 글자수 제한하기

cinema4dr12 2014. 7. 7. 15:05

이번 글에서는 Edit Control 박스에 입력할 수 있는 글자수를 제한하는 방법에 대하여 알아보도록 하겠다.

테스트를 위하여 MFC 프로젝트명은 "CEditControlTest"라고 하고, 템플릿은 "MFC 응용 프로그램", 응용 프로그램 종류는 "대화 상자 기반(Dialog Box)"으로 한다.

대화 상자 편집에서 도구상자(Tool Box)를 통해 Edit Control을 하나 가져오고 ID는 그대로 둔다(IDC_EDIT1).

최대 입력 글자수는 10자라고 가정한다.


1.  멤버 변수 추가 마법사 시작를 통해 Value 타입 멤버 변수 이용하기

추가된 Edit Control을 우측 마우스 클릭하고 "변수 추가"를 선택하여 "멤버 변수 추가 마법사" 대화 상자가 열리고, 범주를 "Value"로 선택하면 "최대 문자 수" 항목이 활성화 된다. 이 곳에 원하는 최대 입력 글자수를 입력하면 된다. 변수명은 "m_EditCtrl_Val"로 하였다.

이 때 추가된 멤버 변수의 타입은 CString이 된다.

이에 대한 정보는 CEditControlTestDlg 클래스의 DoDataExchange 멤버 함수에 추가된다(DDV_MaxChars):


void CEditControlTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT1, m_EditCtrl_Val);
	DDV_MaxChars(pDX, m_editCtrl, 10);
	DDX_Control(pDX, IDC_EDIT1, m_test);
}


2.  멤버 변수 추가 마법사 시작를 통해 Control 타입 멤버 변수 이용하기

1번 방법과 마찬가지로 추가된 Edit Control을 우측 마우스 클릭하고 "변수 추가"를 선택하여 "멤버 변수 추가 마법사" 대화 상자가 열리고, 범주를 "Control"로 선택한다. 변수명은 "m_EditCtrl_Ctrl"로 하였다.

이 때 추가된 멤버 변수의 타입은 CEdit이 된다.

CEditControlTestDlg 클래스의 OnInitDialog 멤버 함수에 다음과 같이 코드를 작성한다:


BOOL CEditControlTestDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.

	// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
	//  프레임워크가 이 작업을 자동으로 수행합니다.
	SetIcon(m_hIcon, TRUE);			// 큰 아이콘을 설정합니다.
	SetIcon(m_hIcon, FALSE);		// 작은 아이콘을 설정합니다.

	// TODO: 여기에 추가 초기화 작업을 추가합니다.
	m_EditCtrl_Ctrl.SetLimitText(10);

	return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}


3.  멤버 변수 추가없이 Edit Control에 접근하여 글자수 제한 설정하기

추가된 Edit Control의 ID로 직접 접근하여 최대 글자수를 설정하는 방법이다. 

CEditControlTestDlg 클래스의 OnInitDialog 멤버 함수에 다음과 같이 코드를 작성한다:


BOOL CEditControlTestDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.

	// IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
	//  프레임워크가 이 작업을 자동으로 수행합니다.
	SetIcon(m_hIcon, TRUE);			// 큰 아이콘을 설정합니다.
	SetIcon(m_hIcon, FALSE);		// 작은 아이콘을 설정합니다.

	// TODO: 여기에 추가 초기화 작업을 추가합니다.
	((CEdit*)GetDlgItem(IDC_EDIT1))->SetLimitText(2);

	return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
Comments