일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OpenGL
- window programming
- Win32 API
- shader programming
- Geometry Modeling
- denoising
- 운영체제
- 윈도우
- 윈도우 구조
- 컴퓨터 구조
- 윈도우프로그래밍
- c4d
- win32
- 그래픽스
- 윈도우 프로그래밍
- bezier curve
- 컴퓨터 아키텍쳐
- 핵심 API로 배우는 윈도우프로그래밍
- 렌더링
- 셰이더
- MFC
- 셰이더프로그래밍
- Mesh Processing
- Graphics
- 오픈지엘
- 그래픽스기초
- modeling
- 베지에 곡선
- shader
- MFC 윈도우 프로그래밍
- Today
- Total
오다기리 박의 알고리즘 노트
[WIN32 API] 6. 대화상자와 컨트롤 본문
6. 대화상자와 컨트롤
■ 대화상자 이용
리소스에서 새로운 대화상자 만들기
대화상자에 대한 메시지 처리 함수 작성하기
대화상자 띄우기
■ 컨트롤을 대화상자에서 기본적으로 사용할 수 있도록 제공되는 것
■ 컨트롤에서 대화상자로 오는 WM_COMMAND 메시지
메시지를 보낸 곳 | wParam | lParam | |
HIWORD | LOWORD | ||
컨트롤 | 컨트롤에 따른 통지 정보 | 컨트롤 ID | 컨트롤 핸들 값 |
■ 컨트롤에 메시지를 전송하는 함수 (콤보박스, 리스트박스.. 등에서 사용)
LRESULT SendMessage(HWND hwnd,
UINT iMsg,
WPARAM wParam,
LPARAM lParam);
- hwnd : 메시지를 받을 윈도우나 컨트롤의 핸들 값
- iMsg : 전송할 메시지
- wParam, lParam : 메시지의 부가 정보
■ 버튼 컨트롤
⠂통지 정보 종류
- BN_CLICKED : 버튼클릭
- BN_DBCLICK : 버튼 더블클릭
- BN_DISABLE : 버튼 사용 불가능 상태
- BN_HILITE : 사용자가 버튼 선택
- BN_SETFOCUS : 버튼이 포커스를 받음
⠂윈도우에 작은 윈도우가 존재하고, 그것은 GetDlgItem()함수를 이용해 ID로 얻어올 수 있다.
■ 에디트 컨트롤 : 사용자의 키보드 입출력을 위한 편집 창
⠂통지 정보 종류
- EN_CHANGE : 에디트 컨트롤의 내용이 변함
- EN_HSCROLL : 에디트 컨트롤의 수평 스크롤바 선택
- EN_VSCROLL : 에디트 컨트롤의 수직 스크롤바 선택
- EN_SETFOCUS : 에디트 컨트롤이 포커스를 받음
■ 콤보박스 컨트롤 : 항목의 리스트 컨트롤을 보여주어 이 중 하나를 선택할 때 사용
⠂통지 정보 종류
- CBN_DROPDOWN : 콤보박스 컨트롤에 등록된 항목이 아래로 펼쳐짐
- CBN_DBCLK : 아래로 펼쳐진 항목 리스트 컨트롤에서 하나를 더블클릭
- CBN_EDITCHANGE : 콤보박스 컨트롤의 텍스트 편집 공간에 텍스트를 추가,수정
- CBN_SELCHANGE : 항목 리스트 컨트롤에서 하나를 선택
⠂콤보 박스 컨트롤에 보내는 iMsg
- CB_ADDSTRING : 콤보박스 컨트롤의 항목 리스트에 문자열을 새로 추가
wParam : 사용X
lParam : 추가될 문자열의 시작 주소
- CB_DELETESTRING : 콤보박스 컨트롤에 있는 항목 하나를 삭제
wParam : 삭제하고자 하는 항목의 인덱스
lParam : 0
- CB_FINDSTRING : 항목 리스트 컨트롤에 있는 텍스트 중 원하는 텍스트를 찾음
wParam : 찾기 시작할 위치를 지정하는 인덱스 값으로 0부터 시작함. -1로 하면 리스트 컨트롤 전체에서 찾는다
lParam : 찾고자 하는 문자열의 시작 주소
- CB_GETCOUNT : 콤보 박스 컨트롤의 항목 리스트에 있는 항목의 개수 얻기
wParam : 0
lParam : 0
- CB_GETCURSEL : 현재 선택한 항목의 인덱스 번호 얻기
wParam : 0
lParam : 0
- CB_SERCURSEL : 콤보박스 컨트롤의 텍스트 편집 공간에 지정한 항목의 텍스트를 보여줌
wParam : 나타내고자 하는 항목의 인덱스 번호
lParam : 사용x
■ 리스트박스 컨트롤 : 외부 입력 없이 여러 개의 항목을 일렬로 보여주는 컨트롤
⠂통지 정보 종류
- LBN_DBCLK : 리스트 박스 컨트롤의 여러 항목 중 하나를 더블클릭
- LBN_SELCHANGE : 항목 중 하나가 선택됨
- LBN_SETFOCUS : 리스트 박스 컨트롤이 포커스를 받음
- LBN_KILLFOCUS : 리스트 박스 컨트롤이 포커스를 잃음
- LBN_DELETEITEM : 리스트 박스 컨트롤의 항목 중 하나가 삭제됨
⠂리스트 박스 컨트롤에 보내는 iMsg
- LB_ADDSTRING : 리스트 박스 컨트롤의 항목 리스트 마지막에 문자열을 추가
wParam : 사용x
lParam : 문자열의 시작 주소
- LB_DELETESTRING : 리스트 박스 컨트롤에 있는 항목 중 하나를 삭제
wParam : 삭제하려는 항목의 인덱스 정수
lParam : 0
- LB_FINDSTRING : 항목 리스트 컨트롤에 있는 텍스트 중 원하는 텍스트 찾기
wParam : 찾기 시작할 위치를 지정하는 인덱스 값으로 0부터시작함. -1로 하면 리스트 컨트롤 전체에서 찾음
lParam : 찾고자 하는 문자열의 시작 주소
- LB_GETCOUNT : 리스트 박스 컨트롤의 항목 리스트에 있는 항목 개수 얻기
wParam : 0
lParam :0
- LB_GETCURSEL : 현재 선택한 항목의 인덱스 번호 얻기
wParam : 0
lParam :0
- LB_SETCURSEL : 선택한 항목을 보여줌
wParam : 선택한 항목의 인덱스 번호
lParam : 사용x
- LB_GETSELCOUNT : 리스트 컨트롤 중 선택한 항목의 개수 얻기
wParam :0
lParam :0
- LB_GETSELITEM : 리스트 컨트롤 중 선택한 항목의 인덱스 번호 가져오기
wParam : 선택할 수 있는 항목의 최대 개수
lParam : 선택한 항목들의 인덱스 번호를 저장할 정수 배열의 시작주소
- LB_GETTEXT : 항목 리스트 컨트롤 중 wParam에서 지정한 인덱스 항목의 텍스트 얻어오기
wParam : 얻어올 항목의 인덱스 번호
lParam : 얻어온 텍스트를 저장할 버퍼의 시작 주소
- LB_INSERTSTRING : 항목 리스트 중간에 문자열을 새로운 항목으로 추가
wParam : 항목 리스트 중 추가될 위치의 인덱스 번호
lParam : 문자열의 시작 주소
■ 모덜리스 대화상자
모덜 대화상자는 대화상자의 핸들 값이 필요없지만, 모덜리스 대화상자는 부모 윈도우와 대화상자가 동시에 구동되기 때문에 부모 윈도우가 대화상자의 윈도우 핸들 값을 가져야 한다.
모덜 대화상자 생성,삭제 : DialogBox(), EndDialog()
모덜리스 대화상자 생성,삭제 : CreateDialog(), DestroyWindow()
■ 리스트 컨트롤 : 리스트박스 컨트롤의 발전된 형태
■ 컨트롤에서 대화상자로 오는 WM_NOTIFY메시지 : 컨트롤에 변화가 있을 때 부모 윈도우(대화상자)에 보내진다
메시지를 보내는 곳 | lParam | wParam | |
(LPNMHDR)lParam | (LPNMLISTVIEW)lParam | ||
컨트롤 | 변화가 일어난 컨트롤의 윈도우 핸들 값과 변화 내용을 알 수 있음 | 리스트 컨트롤의 어떤 항목에 변화가 있었는지 알 수 있음 |
NMHDR구조체
typedef struct tagNMHDR {
HWND hwndFrom; ->변화가 발생한컨트롤의 윈도우 핸들 값
UINT_PTR idFrom; ->메시지를 보낸 컨트롤의 ID값
UINT code; ->컨트롤에 발생한 변화 내용
} NMHDR; (LVN_ITEMCHANGING : 리스트 컨트롤의 항목에 변화 발생
LVN_KEYDOWN: 리스트 컨트롤에서 키보드 누름
LVN_INSERTITEM: 리스트 컨트롤에 새항목 추가
LVN_DELETEITEM: 리스트 컨트롤의 항목 하나 삭제
LVN_COLUMNCLICK: 리스트 컨트롤의 특정 칼럼 선택)
NMLISTVIEW 구조체
typedef struct tagNMLISTVIEW {
NMHDR hdr; ->WM_NOTIFY와 함께 변화가 일어난 컨트롤의 윈도우 핸들 값과 변화내용을 알려주는 정보. 이는 lParam을 NMLISTVIEW로 형변환 할 때와 동일
int iItem;->리스트 컨트롤의 몇 번째 행에 변화가 있었는지에 대한 인덱스 0부터 시작
int iSubItem; ->리스트 컨트롤의 몇 번째 열에 변화가 있었는지에 대한 인덱스 0부터시작
UINT uNewState; ->나머지는 WM_NOTIFY에서 사용x
UINT uOldState;
UINT uChanged;
POINT ptAction;
LPARAM lParam;
} NMLISTVIEW, *LPNMLISTVIEW;
'WIN32 API' 카테고리의 다른 글
[WIN32 API] 8. 파일 입출력 (0) | 2017.11.03 |
---|---|
[WIN32 API] 7. MDI 프로그래밍 (0) | 2017.11.03 |
[WIN32 API] 5. 단축키와 비트맵 (0) | 2017.11.03 |
[WIN32 API] 4. 윈도우 메뉴 (0) | 2017.11.03 |
[WIN32 API] 3. 제어 메시지 처리하기 (0) | 2017.11.03 |