2009. 9. 2. 19:08

[VC++][MFC][API] EditControl 혹은 ComboBox 입력 글자 수 제한

오랜 기억으로 Visual Basic 에서는 UI Editor 자체에 글자 수를 제한하는 기능이 있었던거 같은데..
MFC에는 없습니다.

고로.. Edit Change 이벤트가 발생할때 (즉 사용자가 Control 에 입력을 시도 하였을때) 글자 수를 체크해서 강제로 입력을 제한해야되죠.
모르겠습니다. 다른 방법이 있는지는... 뭐 코딩이라는게 효율적인것이 아무리 좋다 한들, 퍼포먼스면에 크게 지장도 없는데 효율찾다가 수십수시간수일 날리는 것보단 아는 방법 선 내에서 처리하는게 좋다고 생각합니다.

물론 더 좋은 방법을 어쩌다 찾게되면 그게 바로 Lucky~~ ^_^ 아닐까요...

아래 소스를 보실때 유심히 봐야될 것이 바로 API 함수인 WideCharToMultiByte 입니다.
해당 함수는 유니코드(WideChar)를 아스키코드(MultiByte[AnsiString])으로 변환 시켜주는 함수인데요,
왜 사용하느냐 하면 CString 은 기본적으로 wchar_t 입니다.

본래 알파벳은 1byte, 한글을 2byte인데 모든 문자열을 2byte 취급하고 있는중이죠. 즉 GetLength를 했을때 '과자A' 라는 문자열의 글자 수는 3으로 나오게됩니다. 5가 나오면 좋겠는데 3이 나오면 난감하죠...

여기서는 WideCharToMultiByte 를 단지 글자 수를 원하는 결과로 받아오기 위해서 사용했지만, 실상은 Converting 하는데 있습니다 :) 참고해두세요~

아래는 예제 약식 소스입니다. (복사해서 써봐야 답안나와요~ 참고만 하세요)

TestDialog.h


TestDialog.cpp






수정 : 2009 09 04

있습니다....
SetLimitText 라는 함수가 있군요..

문제는 이 함수의 경우 유니코드 기반으로 글 수를 체크하다보니... 영문이나 숫자 5글자랑 한글 5글자랑 같은 취급합니다.

위 포스팅 내용은 AnsiString 기반으로 되어있구요.
뭐... AnsiString 기반으로 설정하는 함수도 있으려나요???