잡음 추가 대화 상자의 디자인이 끝이 났으면, 이 대화 상자에 대한 클래스를 추가하자. 잡음 추가 대화 상자의 클래스 이름은 CAddNoiseDlg를 사용하기로 하고, 표 8-10을 참조하여 대화 상자 컨트롤들에 대한 멤버 변수 두 개를 추가하자.
ID |
범주 |
변수 형식 |
변수 이름 |
최솟값 |
최댓값 |
IDC_NOISE_RADIO1 |
Value |
int |
m_nNoiseType |
||
IDC_NOISE_AMOUNT |
Value |
int |
m_nAmount |
0 |
100 |
이제 대화 상자 디자인 창에서 할 일은 모두 완료하였다. 이제 이 대화 상자에 대한 초기화 작업을 추가해보자. 먼저 CAddNoiseDlg 클래스의 생성자에서 잡음의 양을 나타내는 m_nAmount 멤버 변수의 초깃값을 5로 변경하고, OnInitDialog 함수에서 스핀 컨트롤의 값 범위를 0부터 100으로 지정하자. 소스 8-14를 참고하라.
소스 8-14에서 스핀 버튼의 범위를 설정하는 SetRange 함수의 사용 부분을 눈여겨보자. 여기서 GetDlgItem이라는 함수가 나오는데, 이 함수의 원형은 다음과 같다.
CWnd* GetDlgItem(int nID) const;
GetDlgItem 함수는 대화 상자에 추가된 컨트롤의 아이디를 인자로 받아 그 컨트롤에 해당하는 클래스 포인터를 CWnd* 타입으로 반환한다. 이 포인터를 실제 사용할 때에는 해당 컨트롤에 맞는 형태로 형변환하여 사용해야 한다. 만약 임시 지역 변수를 선언하여 포인터 주소를 받으려면 다음과 같이 코드를 작성할 수 있다.
CSpinButtonCtrl* pSpin = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN_AMOUNT);
CSpinButtonCtrl 클래스의 포인터를 얻었으니 이제 -> 연산자를 이용하여 CSpinButtonCtrl 클래스의 멤버 함수들을 호출하여 사용할 수 있다. SetRange 함수는 스핀 버튼이 나타낼 수 있는 값의 범위를 설정하는 함수이다. SetRange(0, 100) 형태로 코드를 작성할 경우, 스핀 버튼의 상하 버튼을 클릭하여 에디트 컨트롤의 값을 0부터 100까지 변경할 수 있다.
사실 이 코드는 스핀 버튼 컨트롤의 Control형 멤버 변수를 추가하여 보다 간단하게 바꿀 수도 있다. 즉, IDC_SPIN_AMOUNT에 해당하는 스핀 컨트롤에 대해 Control형 멤버 변수 m_spinAmount를 CSpinButtonCtrl 타입으로 추가하고, m_spinAmount.SetRange(0, 100);의 형태로 코드를 작성하여도 같은 동작을 수행하게 된다. 다만 멤버 변수로써 사용이 많지 않은 경우에는 GetDlgItem 함수를 사용하는 것도 나쁘지 않다.