1. 컨트롤 기초
2. 버튼 컨트롤

 

1. 컨트롤 기초

※ 생성 방법

- CreateWindow()

- 폼 + 도구 상자 

다이얼로그 폼
도구 상자에서 드래그 앤 드롭
이런 식으로 설정이 가능하다. 입력칸 아래는 '도구 상자' 속에 있는 Static Text 기능을 가져온 것이다.

- Static Text는 단순 문자열 출력 도구이다.

 

 

 

컨트롤 아이디 : 중복되지 않는 양의 정수값

→ Visual Studio에서 자동으로 할당. IDC_XXXX로 시작한다.

 

 

※ 컨트롤의 윈도우 핸들 GetDlgItem()

HWND GetDlgItem(
  HWND hDlg,
  int  nIDDlgItem
);

 

 

※ 컨트롤 메시지 처리 WM_COMMAND 

- LOWORD(wParam) 아이디 → 여러 컨트롤 구분

- HIWORD(wParam) 컨트롤 상태, 통지 코드 

   :: 통지코드 예시

   BN_CLICKED 버튼이 클릭된 상태

   BN_DBCLICK 버튼이 더블클릭된 상태

   BN_SETFOCUS 버튼이 선택된 상태

   BN_DISABLE 버튼 사용 불가 상태

 

 

※ 컨트롤 속성

기본 속성

속성 역할
Caption 컨트롤에 표시되는 텍스트
ID 컨트롤의 아이디
Visible 컨트롤의 출력 여부를 결정

 

ID, Visible 속성
Caption 속성


2. 버튼 컨트롤

: 푸시, 라디오, 체크 버튼

 

→ 생성 방법 ?

폼 + 도구 상자 + 드래그 앤 드롭 (위에서 한 방식과 같다)

 

사용 시 기본 메세지 WM_COMMAND가 발생하고, 각각의 버튼에 해당되는 LOWORD(wParam) 아이디를 이용하면 된다.

 

① 푸시 버튼

푸시 버튼 추가
폼 기반의 대화 상자라 코드가 아주 간단하다. 저 39줄이 전부
버튼 클릭 시

 


② 라디오 버튼

역할 : 여러 항목 중에서 하나 선택

 

라디오 버튼 2개 생성 후 아이디 확인
WM_COMMAND에서 추가

 

 

※ 상태 조사 함수 IsDlgButtonChecked

UINT IsDlgButtonChecked(
  HWND hDlg,
  int  nIDButton
);

리턴 코드 : BST_CHECKED, BST_UNCHECKED, BST_INDETERMINATE

 

 

기존 코드를 조금 수정한다.

체크된 라디오 버튼 각각을 구분하기 위해서 배열을 선언한 후, 몇 번째 라디오 버튼이 눌렸는지 상태를 확인하여 출력하는 코드이다.

 

각각 선택되었을 때 결과가 다르다

 

※ 상태(선택/비선택) 변경

상태 변경 함수 

 

1) BOOL CheckDlgButton()

: 임의로 개별 선택 및 비선택 설정

BOOL CheckDlgButton(
  HWND hDlg,
  int  nIDButton,
  UINT uCheck //BST_CHECKE, BST_UNCHECKED
);

 

2) BOOL CheckRadioButton()

그룹 안에 있는 라디오 버튼 하나만 임의로 선택

그룹? Group 속성을 TRUE로 설정하면 됨

BOOL CheckRadioButton(
  HWND hDlg,
  int  nIDFirstButton,
  int  nIDLastButton,
  int  nIDCheckButton
);

라디오 버튼 수정. 라디오1의 Group 설정을 TRUE로 하면 1,2,3이 하나의 그룹이 된다. 

만약 라디오 버튼 4,5,6을 추가하고 이 셋을 하나의 그룹으로 만들고자 한다면, 라디오 4의 Group 설정만 TRUE로 하면 된다. 

 

버튼2 수정
1을 선택한 후 '라디오' 버튼을 누르면 저절로 2번이 선택된다. 3번도 마찬가지


③ 체크 버튼

: 다수의 컨트롤 선택, 다수의 선택 사항 파악

 

nCheckID 배열 추가
WM_COMMAND의 switch문에 이를 추가한다.

화면에 On, Off를 표시하기 위해서 InvalidateRect 를 사용한다.

 

WM_PAINT 문을 추가한다.

 

체크된 것만 On으로 바뀜

 

'Project > WIN32 API' 카테고리의 다른 글

컨트롤(3)  (0) 2021.07.22
컨트롤(2)  (0) 2021.07.22
다이얼로그  (0) 2021.07.21
키보드, 마우스  (0) 2021.07.13
그래픽 오브젝트  (0) 2021.07.12

+ Recent posts