- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[API/MFC] 버튼, 버튼의 통지코드, 컨트롤 메세지 본문
1. 버튼
기본적인 컨트롤 만들기는 7-1에서 설명하였다. 인제 부족한 부분을 보충해보자.
CreateWindow함수에서 3번째 인수인 윈도우 스타일 부분에 들어갈 수 있는 스타일의 종류이다.
즉 button 클래스로 만들수 있는 버튼의 종류이다.
(1). 버튼 모양 관련 스타일
Value Meaning
BS_PUSHBUTTON 푸시 버튼
BS_DEFPUSHBUTTON 디폴트 푸시 버튼
BS_CHECKBOX 체크 박스
BS_3STATE 3가지 상태를 가지는 체크 박스
BS_AUTOCEHCKBOX 자동 체크 박스
BS_AUTO3STATE 3가지 상태를 가지는 자동 체크 박스
BS_RADIOBUTTON 라디오 버튼
BS_AUTORADIOBUTTON 그룹박스 안에서 사용되는 자동 라디오 버튼
BS_GROUPBOX 그룹 박스
BS_BITMAP 버튼의 모양을 비트맵으로 만든다.
BS_FLAT 버튼의 모양을 2차원으로 만든다.
기본 쉐이딩으로 3차원을 만들때 적용하지 않는다. (??)
BS_ICON 버튼의 모양을 아이콘으로 만든다.
*AUTO가 붙은 스타일은 기본적으로 지정해 주지 않아도 체크박스를 누르면 체크모양이 나오거나 사라지고, 라디오 버튼을 누르면
라디오 버튼안에 점이 생긴다. AUTO가 붙지 않은 스타일로 만들었을 경우 이러한 처리를 해주지 않는다.
(2).텍스트 정렬 관련 스타일
Value Meaning
BS_TEXT 버튼의 텍스트를 표시하게 한다. (Default)
BS_BOTTOM 텍스트를 사각형의 바닥에 정렬시킨다.
BS_TOP 텍스트를 사각형의 위쪽에 정렬시킨다.
BS_CENTER 텍스트를 사각형의 가운데 정렬시킨다.
BS_LEFT 텍스트를 사각형의 왼쪽에 정렬시킨다.
단 체크박스나 라디오 버튼은 위치가 변하지 않는다.
BS_RIGHT 텍스트를 사각형의 오른쪽에 정렬시킨다.
단 체크박스나 라디오 버튼은 위치가 변하지 않는다.
BS_MULTILINE 버튼의 가로 크기보다 문자열이 크다면
(길다면) 여러줄로 문자열을 출력해준다
BS_LEFTTEXT 라디오 버튼이나 체크박스를 사용할 때
텍스트는 왼쪽으로 버튼은 오른쪽으로 배치해준다.
BS_RIGHTBUTTON 라디오 버튼이나 체크박스를 사용할 때
텍스트는 왼쪽으로 버튼은 오른쪽으로 배치해준다.
(BS_LEFTTEXT와 같다.)
다음은 버튼 클래스가 발생시킬수 있는 통지메세지와 발생된 상황이다. (자식 컨트롤 -> 부모 윈도우)
Message Description
BN_CLICKED 사용자에 의해 버튼이 클릭됐을 때.
BN_DBLCLK 사용자에 의해 버튼이 더블클릭됐을 때.
BN_DOUBLECLICKED 사용자에 의해 버튼이 더블클릭됐을 때.
BN_DISABLE 버튼이 비활성화 되었을 때.
BN_PUSHED 사용자에 의해 버튼이 눌렸을 때.
BN_HILITE 사용자에 의해 버튼이 눌렸을 때.
BN_KILLFOCUS 버튼이 키보드의 포커스를 잃었을 때.
BN_PAINT 버튼이 새로 그려져야 할 때.
BN_SETFOCUS 버튼이 키보드의 포커스를 얻었을 때.
BN_UNPUSHED 버튼이 떼어졌을 때.
BN_UNHILITE 버튼이 떼어졌을 때.
다음은 부모윈도우가 버튼에 보낼 수 있는 메세지이다 (부모 윈도우 -> 자식 컨트롤)
Message Default action
BM_CLICK 버튼을 클릭한다고 메세지를 보낸다.
그럼 자식컨트롤은 버튼이 클릭됬다고
BN_CLICKED 통지코드를 발생시킨다.
BM_GETCHECK 체크 박스의 상태를 얻어온다.
BM_SETCHECK 체크 박스의 체크 상태를 변경하며 wParam에 변경할
체크 상태를 보내주면 된다.
BM_GETIMAGE 버튼의 비트맵이나 아이콘의 핸들을 얻어온다.
BM_SETIMAGE 버튼의 비트맵이나 아이콘의 핸들을 설정한다.
BM_GETSTATE 버튼의 체크상태나 푸쉬상태 포커스 상태를 얻어온다.
BM_SETSTATE 버튼의 체크상태나 푸쉬상태 포커스 상태를 설정한다.
BM_SETSTYLE 버튼의 스타일을 설정한다.
* 부모윈도우가 자식컨트롤에 메세지를 보낼 때 에는 자식 컨트롤의 핸들이 필요하다. 때문에 자식 컨트롤에 메세지를
보낼 일이 있으면 자식 컨트롤을 만든 후 반환된 핸들을 HWND 형의 변수에 담아둔다.
ex)
CreateWindow(
L"button", //버튼 클래스로 만든다.
L"hi~안녕하세요~모시모시~", //캡션에 출력할 문자열
WS_CHILD | WS_VISIBLE | //컨트롤이라면 반드시 들어가야 하는 스타일
BS_RIGHT | BS_MULTILINE | BS_PUSHBUTTON, //오른쪽 정렬, 멀티라인, 기본버튼
스타일로 만든다
20,20,100,100, //20,20위치에 100,100크기의 버튼크기
hwnd, //버튼의 부모윈도우 설정
(HMENU)0, //버튼의 ID 설정
g_hInstance, //윈도우가 만들어질 프로그램 인스턴스
NULL);
출력 : 20,20위치에 100,100크기의 버튼이 만들어진다. 문자열이 버튼크기보다 커서 자동으로 줄바꿈(멀티라인)이 되고
오른쪽 정렬을 적용했기때문에 버튼의 오른쪽에 문자열이 달라붙어있다.
ex2)
static HWND b1; //자식컨트롤의 핸들을 받을 윈도우 핸들
case WM_CREATE:
b1 = CreateWindow(L"button",L"hi~안녕하세요~모시모시~", WS_CHILD | WS_VISIBLE | BS_RIGHT | BS_MULTILINE | BS_PUSHBUTTON, 20,20,100,100,hwnd,(HMENU)0,g_hInstance,NULL); //버튼을 만든다. 만든 버튼의 핸들은 b1에 저장한다.
return 0;
case WM_COMMAND: //통지코드를 처리할 부분
//통지코드를 발생시킨 컨트롤의 ID (LOWORD(wParam))
switch(LOWORD(wParam)){
case 0:
if(HIWORD(wParam) == BN_CLICKED){
//통지 메세지가 BN_CLICKED이면 메세지 박스 출력
MessageBox(hwnd,L"버튼이 클릭되었음.",L"알림",MB_OK);
}
break;
}
return 0;
case WM_CHAR: //키보드 처리
switch(wParam){
case 'a': //키보드에 'a'가 눌리면
SendMessage(b1,BM_CLICK,0,0); //b1에 BM_CLICK 메세지를 보낸다.
break;
}
return 0;
[출처] http://blog.naver.com/nawoo?Redirect=Log&logNo=80103048474
'★─Programing > ☆─API | MFC' 카테고리의 다른 글
[API/MFC] Drag & Drop 예제 - DragQueryFile() (0) | 2013.04.22 |
---|---|
[API/MFC] 파일 드래그 앤 드롭 기능 (0) | 2013.03.04 |
[API/MFC] CMenu:: TrackPopupMenu() (0) | 2012.03.02 |
[API/MFC] 윈도우 깜빡임을 최소화 하기 - 2 (더블버퍼링) (0) | 2011.11.04 |
[API/MFC] 윈도우 깜빡임을 최소화 하기 - 1 (WM_ERASEBKGND) (0) | 2011.11.04 |