티스토리 뷰

프로그래밍/API

API 자식윈도우 컨트롤

에어버스 2016. 4. 25. 23:28

자식윈도우에서 발생한 이벤트는 부모 윈도우에 WM_COMMAND 메시지로 전달하고
wParam, lParam 에 정보도 같이 전달한다.

<메뉴 메시지와 컨트롤 메시지 구분 방법> 

 항목

 자식윈도우

 메뉴 

 LOWORD(wParam)

 자식윈도우ID 

 메뉴ID 

 HIWORD(wParam) 

 이벤트 메시지

 0 

 lParam

 윈도우 핸들

 0

그래서, 자식윈도우ID와 메뉴ID가 같으면 안된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    CreateWindow(TEXT("button"), TEXT("버튼1"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 202010025, hWnd, (HMENU)100, hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("버튼2"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 206010025, hWnd, (HMENU)200, hInst, NULL);
        break;
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 메뉴 선택을 구문 분석합니다.
            switch (wmId)
            {
            case 100// 컨트롤 ID
                MessageBox(hWnd, TEXT("버튼1 클릭"), TEXT("Button"), MB_OK);
                break;
            case 200:
                MessageBox(hWnd, TEXT("버튼2 클릭"), TEXT("Button"), MB_OK);
                break;
cs

CreateWindow() 인수 중에 HMENU 변수는 메뉴 핸들값을 가지나 윈도우ID를 등록해서 메시지가 전달되면 어느 윈도우에서 보낸건지 ID구분자로 사용한다.

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
case WM_CREATE:
        CreateWindow(TEXT("button"), TEXT("버튼1"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 202010025, hWnd, (HMENU)100, hInst, NULL);
        CreateWindow(TEXT("button"), TEXT("버튼2"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_TABSTOP, 206010025, hWnd, (HMENU)200, hInst, NULL);
        break;
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 메뉴 선택을 구문 분석합니다.
            switch (wmId)
            {
            case 100:
                MessageBox(hWnd, TEXT("버튼1 이벤트"), TEXT("Button"), MB_OK);
                switch (HIWORD(wParam))
                {
                case BN_CLICKED:
                    MessageBox(hWnd, TEXT("버튼1 클릭"), TEXT("Button"), MB_OK);
                    break;
                case BN_SETFOCUS:
                    MessageBox(hWnd, TEXT("버튼1 포커스 얻음"), TEXT("Button"), MB_OK);
                    break;
                }
                break;
            case 200:
                MessageBox(hWnd, TEXT("버튼2 이벤트"), TEXT("Button"), MB_OK);
                break;
cs

자식윈도우(컨트롤) 메시지는 HIWORD(wParam)로 이벤트 메시지 구분을 한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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