입력 컨트롤에서 허용하는 문자를 제한하려면

Category:
Author: zemna
Date: April 17, 2021
Share this:

압력 컨트롤에서 허용하는 문자를 제한하려면

CEdit에서 클래스를 파생해 WM_CHAR 메시지를 처리하면 입력 컨트롤에서 특정 문자만 입력받을 수

있습니다. 우선 클래스위저드를 사용해 CEdit에서 파생된 클래스를 생성한 후 대화상자의 클래스에서

멤버 변수를 정의합니다. 그리고 OnInitDialog에서 CWnd::SubclassDlgItem을 호출해 입력 컨트롤을

서브 클래싱하면 됩니다.

//대화상자 클래스 선언문

Private :

CMyEdit m_wndEdit; //새로운 입력 컨트롤의 인스턴스

//대화상자 클래스 구현인 .CPP 파일

BOOL CSampleDialog::OnInitDialog(){

....

//입력 컨트롤을 서브 클래싱한다.

m_wndEdit.SubclassDlgItem(IDC_EDIT, this);

...

}

이젠 클래스위저드를 사용해 WM_CHAR 메시지를 처리하면 됩니다. 먼저 nChar 인수를 평가해 어떤

동작을 수행할 것인지 지정해야 하는데 선택에 따라 문자가 출력되지 않게, 또는 문자를 그대로

전달하거나 문자를 변경해 전달할 수 있습니다.

질문처럼 nChar를 숫자로 제한하고 싶다면 CWnd::OnChar에 전달하고, 그렇지 않다면

CWnd::OnChar를 호출하지 않으면 됩니다.

//숫자만 출력한다.

void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {

//nChar가 숫자인지 확인한다.

if(IsCharAlphaNumeric(TCHAR)nChar) && !IsCharAlpha((TCHAR)nChar))

CEdit::OnChar(nChar, nRepCnt, nFlags);

더 나아가 문자를 변경하려면 변경된 nChar 인수만을 전달하면 되는데, 이때 절대 CEdite::OnChar를

호출해서는 안됩니다. 왜냐하면 CEdite::OnChar에서 wParam과 lParam을 처음 값으로 채우는

CWnd::Default를 부르기 때문입니다. 따라서 nChar를 변경하고 CWnd::DefWindowProc를

호출합니다. 방법은 다음과 같습니다.

//모든 문자를 대문자로 만든다.

void CMyedit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){

//문자를 그대로 변환한다.

if (IsCharAlpha((TCHAR)nChar))

nChar = toupper(nChar);

//기본적인 OnChar 함수를 무시하고, 윈도우 기본 프로시저를 호출한다.

DefWindowProc(WM_CHAR, nChar, MAKEPARAM(nRepCnt,nFlags))

}

Share this:

Leave a Reply

Your email address will not be published. Required fields are marked *

Let's connect and create
something awesome together!
2023 - Copyright, All Rights Reserved, Made by ZEMNA.NET with ❤️
crossmenu linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram