티스토리 뷰
Visual Studio 2012 사용
비슷한 작동을 하는 컨트롤들을 하나의 함수로 묶어서 사용해보자.
예) 계산기 숫자 버튼..
ON_CONTROL_RANGE를 몰랐다면 각각의 컨트롤에 버튼클릭 이벤트 함수를 만들어 사용해야 했지만,
이제는 한개의 함수로 제어가 가능하다.
1~4의 숫자에 해당되는 버튼을 만들어 버튼 클릭시 해당 숫자가 EditBox에 표현되는 프로그램을 만들어보자.
1. 준비
1) ON_CONTROL_RANGE 원형(MSDN)
ON_CONTROL_RANGE( wNotifyCode , id1 , id2 , memberFxn )
wNotifyCode: 메시지 핸들러를 입력하면 된다.(BN_CLICKED 같은..)
id1: 함수에 적용할 첫번째 컨트롤의 ID를 입력한다.
id2: 함수에 적용할 마지막 컨트롤의 ID를 입력한다.
memberFxn: 매핑할 함수 명을 입력한다.
2) MFC 윈폼 프로젝트 생성
대화상자 기반 프로젝트 생성 후에 Editbox 1개와 버튼을 4개 만든다.
(예시 프로젝트 이름: ControlRange)
ON_CONTROL_RANGE에 사용할 컨트롤 ID는 연속적으로 이어진 컨트롤이어야 하기에
버튼 컨트롤들을 아래와 같이 연속성있게 만들어준다.
Resource.h
#define IDC_EDIT1 1000 #define IDC_BUTTON1 1001 #define IDC_BUTTON2 1002 #define IDC_BUTTON3 1003 #define IDC_BUTTON4 1004
2. 선언
아래와 같이 각 함수를 선언한다.
ControlRangeDlg.cpp
BEGIN_MESSAGE_MAP(CControlRangeDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_CONTROL_RANGE(BN_CLICKED, IDC_BUTTON1, IDC_BUTTON4, OnNumberBtnClick) END_MESSAGE_MAP()
Visual Studio에서 제공해주는 클래스 위자드로는 설정 할 수 없어서 직접 저 위치에 코딩했다.
OnNumberBtnClick이란 함수이름을 정해 아래의 헤더에도 선언해주자.
ControlRangeDlg.h
class CControlRangeDlg : public CDialogEx { ... // 구현입니다. void OnNumberBtnClick(UINT ctrlID); DECLARE_MESSAGE_MAP() ... }
컨트롤 ID는 UINT로 처리하기 때문에 파라미터를 UINT형으로 만들었다.
3. 활용
ControlRangeDlg.cpp
void CControlRangeDlg::OnNumberBtnClick(UINT ctrlID) { CString strTmp; int value = ctrlID-1000; strTmp.Format(_T("%d"), value); SetDlgItemText(IDC_EDIT1,strTmp); }
위와 같이 코딩된 후에 테스트 하면 각 버튼을 클릭할때마다 IDC_EDIT1 EditBox에 해당 숫자가 표현이 된다.
로직
1) 버튼이 클릭될 경우, ctrlID의 해당 버튼 컨트롤 ID가 전달이 된다.
2) int형 value를 만들어 해당 버튼의 숫자를 파악한다.
(IDC_BUTTON1 의 경우 1001이기 때문에 -1000을 하게 되면 value는 1이된다.)
3) 해당 value를 CString으로 전환하여 EditBox에 표현한다.
끝!
'Programming > MFC(C++)' 카테고리의 다른 글
[MFC] 이벤트를 사용해보자 CreateEvent, SetEvent, ResetEvent (0) | 2019.01.03 |
---|---|
[MFC] Performance Counter를 사용하여 코드 속도 측정하기 (0) | 2018.12.31 |
[MFC] 파일 ZIP 압축/해제 활용하기 (3) | 2018.12.17 |
[MFC] INI 파일 활용 하기(문자열 값 저장/불러오기) (0) | 2018.12.17 |
[MFC] 대화상자 트레이 아이콘 컨트롤하기(TrayIcon) (0) | 2018.12.11 |
- Total
- Today
- Yesterday
- sqlite3
- ADODB
- #자동업데이트
- 프로세스이름변경
- MSSQL
- CMFCBUTTON
- Modeless
- ADO
- 스쿠트항공 환불받기
- 소켓
- MFC ADO
- 스티커메모로드중
- c++
- 부가가치세
- MFC Modeless
- 청년내일채움공제
- Sticky Notes Loading
- 모달리스 다이얼로그
- MFC
- 부가가치세전산매체
- 전자신고변환
- 해외송금확인
- 항공알파벳
- 법정동코드
- 전자신고파일설명서
- 모달리스
- SendMessage
- 세금계산서합계표양식
- MXCOMPONENT
- 청년내일채움공제 만기신청
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |