컴퓨터 공부/Win32 API 프로그래밍

[5월 1일 1교시] 컨트롤2

려리군 2009. 5. 1. 15:14

윈도우 프로시저에서 컨트롤, 메뉴, 엑셀러레이터 제어 방법

case WM_COMMAND:

switch(LOWORD(wParam))

{

case 메뉴1: break;

case 메뉴2: break;

case 엑셀러레이터: break;

case 컨트롤1:

switch(HIWORD(wParam))

{

case 통지코드1: break;

case 통지코드2: break;

}

break;

}

return 0;


버튼

윈도우 클래스 : button

스타일

BS_PUSHBUTTON

BS_DEFPUSHBUTTON : 사용자에게 디폴트로 반응함을 표현하는 버튼

BS_(AUTO)CHECKBOX : 2가지 상태

BS_(AUTO)3STATE : 3가지 상태

BS_(AUTO)RADIOBUTTON : 여러 그룹 중 하나 선택되면 나머지는 해제.

BS_GROUPBOX

수동 CHECKBOX, 3STATE, RADIOBUTTON은 컨트롤에서 통지메세지가 발생했을 때 바로 반응하도록 프로그래밍 할 때 사용한다.

    예시) 음소거 체크박스.

통지코드 : BN_CLICKED(버튼이 눌렸을 때)


에디트

윈도우 클래스 : edit

스타일 

ES_AUTOHSCROLL, ES_AUTOVSCROLL : 자동 수평, 수직 스크롤바 포함

ES_LEFT, ES_CENTER, ES_RIGHT : 정렬방식 지정

ES_LOWERCASE, ES_UPPERCASE : 소문자 혹은 대문자로 변환하여 표시

ES_MULTILINE : 여러 줄 편집 가능

ES_NOHIDESEL : Focus를 잃어도 선택된 영역 표시

ES_READONLY : 읽기전용

통지코드

EN_CHANGE : 내용이 바뀌고 문자열이 화면에 출력되고 난 후

EN_UPDATE : 내용이 바뀌고 문자열이 화면에 출력되기 전에 

 사용예 : 문자열 길이에 따라 에디트의 폭을 늘리거나 문자열 내용을 지울 경우.

EN_ERRSPACE : 메모리 부족

EN_HSCROLL, EN_VSCROLL : 수평, 수직 스크롤바 클릭

EN_KILLFOCUS, EN_SETFOCUS : 포커스를 잃었다. 얻었다.

EN_MAXTEXT : 지정한 문자열의 길이 초과 시


컨트롤도 일종의 윈도우이므로 윈도우 함수를 사용할 수 있다.

 예) CreateWindow, MoveWindow, GetWindowText, SetWindowText등등.


리스트박스

윈도우 클래스 : listbox

스타일

LBS_MULTIPLESEL : 여러개 항목 선택 가능.

LBS_NOTIFY : 목록 중 하나를 선택했을 때 통지 메세지를 보냄.

LBS_SORT : 항목 자동 정렬

LBS_OWNERDRAW : 비트맵이나 그림 삽입 가능하게

LBS_STANDARD : LBS_NOTIFY | LBS_SORT | WS_BORDER

조작용 메시지(SendMessage로 제어)

LB_ADDSTRING : lParam으로 추가하고자 하는 문자열의 포인터를 넘김.

LB_DELETESTRING : wParam에 삭제할 항목의 index를 넘김.

LB_GETCURSEL : 현재 선택된 항목의 index 리턴.

LB_GETTEXT : 지정된 index의 문자열을 읽음. wParam : 항목번호, lParam : 문자열의 포인터.

LB_SETCURSEL : 선택할 항목을 wParam의 index로 지정.

통지메세지

LBN_DBLCLK

LBN_ERRSPACE : 메모리 부족

LBN_KILLFOCUS, LBN_SETFOCUS

LBN_SELCANCEL

LBN_SELCHANGE


콤보박스

윈도우 클래스 : combobox

에디트 + 리스트박스의 형태


스크롤바

윈도우 클래스 : scrollbar

스타일

SBS_HORZ : 수평 방향의 스크롤바

SBS_VERT : 수직 방향의 스크롤바


BOOL SetScrollRange(HWND hWnd, int nBar, int nMinPos, int nMaxPos, BOOL bRedraw);

스크롤바의 범위를 정한다.

hWnd : 스크롤바 윈도우 핸들

nBar : SB_CTL이면 별도의 컨트롤(붙박이식의 컨트롤이 아닌)임을 의미

nMinPos,nMaxPos : 최소값, 최대값

bRedraw : TRUE면 다시 그려줌.

int SetScrollPos(HWND hWnd, int nBar, int nPos, BOOL bRedraw);

스크롤바의 위치를 정한다.

hWnd : 스크롤바 윈도우 핸들

nBar : SB_CTL이면 별도의 컨트롤(붙박이식의 컨트롤이 아닌)임을 의미

nPos : 정할 위치 값.

bRedraw : TRUE면 다시 그려줌.


통지메세지

수평스크롤이 움직일 때는 WM_HSCROLL 발생.

수직스크롤이 움직일 때는 WM_VSCROLL 발생.

 - LOWORD(wParam) : 스크롤 바의 어디가 눌렸는가?

    SB_LINELEFT, SB_LINEUP, SB_PAGELEFT, SB_PAGEUP, SB_PAGERIGHT, SB_PAGEDOWN

    SB_THUMBPOSITION : 스크롤 박스를 드래그 한 후 마우스 버튼을 놓았다.

    SB_THUMBTRACK : 스크롤 박스를 드래그 하는 중.

 - HIWORD(wParam) : 현재 위치

 - lParam : 스크롤 바의 윈도우 핸들


Static

윈도우 클래스 : static

메세지를 스스로 처리 가능하므로 배치 후 신경 쓰지 않아도 됨.