[API] DialogBox

simpled 2013.06.23 15:56 조회 수 : 6739

/*

대화상자는 동작 방식에 따라 크게 모달형과 모델리스 형으로 나뉘어 진다.

 

모달형은 대화상자를 닫기 전에 다른 윈도우로 전환 할 수 없으며

모델리스형은 대화상자를 닫기 전에도 다른 윈도우와 전환 될 수 있다.

컨트롤 통신 방식은 같으며, 자세한건 나중에 설명하겠다.

모달형 대화상자의 선언 형식은 WM_COMMAND의 IDM_ABOUT 에서 볼 수 있다.

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

 

이때 3번째의 hWnd를 NULL값으로 바꾸기만 하면 모델리스 형이 된다.

 

가급적이면 리소스에 관련된 분야를 손 안대려고 했는데 (캡쳐하는게 귀찮아서)

그런 의미에서 다이얼로그 박스 만드는 과정을 아주 간단하게 하나의 캡쳐로 소개한다.


제목 없음.jpg


1. 화면 좌측 하단쪽(출력창 위쪽)에 보면 리소스 보기 탭이 있다. 그것을 누르자.

2. 리소스 트리가 나오며 Dialog폴더에 마우스를 우측클릭하여 대화상자(Dialog)를 추가한다.

3. 화면 우측의 도구 모음에서 컨트롤들을 가져다가 놓을 수 있다. (이렇게 하면 일일이 CreateWindow를 호출 할 필요가 없다.)

4. 화면 우측의 설정 탭에서 캡션 및 아이디를 변경 할 수 있다.

5. 대화상자를 선언한다. (대화상자의 아이디는 다음과 같이 받아야 한다.)

  DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);

 

대화상자 선언의 끝으로는 콜백함수의 이름이 들어간다.

 

보통 콜백 함수의 꼴은 이러하다. 

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

        UNREFERENCED_PARAMETER(lParam);

        switch (message)

        {

        case WM_INITDIALOG:

               return (INT_PTR)TRUE;

 

        case WM_COMMAND:

               if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)

               {

                       EndDialog(hDlg, LOWORD(wParam));

                       return (INT_PTR)TRUE;

               }

               break;

        }

        return (INT_PTR)FALSE;

}

조금 고쳐서 사용한다면 부모 윈도우의 초기 설정값을 사용하는 것도 좋다.

방식은 똑같다.

 

이것은 그리고 프로젝트를 만들면 About 대화상자가 꼭 한개씩 붙어있으므로 본보기는 생략하겠다.

*/