다음을 통해 공유


창 닫기

사용자가 창을 닫으면 해당 작업은 창 메시지 시퀀스를 트리거합니다.

사용자는 닫기 단추를 클릭하거나 Alt+F4와 같은 바로 가기 키를 사용하여 애플리케이션 창을 닫을 수 있습니다. 이러한 작업을 수행하면 창이 WM_CLOSE 메시지를 받습니다. WM_CLOSE 메시지는 창을 닫기 전에 사용자에게 메시지를 표시할 수 있는 기회를 제공합니다. 실제로 창을 닫으려면 DestroyWindow 함수를 호출합니다. 그렇지 않으면 WM_CLOSE 메시지에서 0을 반환합니다. 그러면 운영 체제는 메시지를 무시하고 창을 삭제하지 않습니다.

다음은 프로그램이 WM_CLOSE를 처리하는 방법의 예입니다.

case WM_CLOSE:
    if (MessageBox(hwnd, L"Really quit?", L"My application", MB_OKCANCEL) == IDOK)
    {
        DestroyWindow(hwnd);
    }
    // Else: User canceled. Do nothing.
    return 0;

이 예제에서 MessageBox 함수는 확인취소 단추가 포함된 모달 대화 상자를 보여 줍니다. 사용자가 확인을 클릭하면 프로그램은 DestroyWindow를 호출합니다. 그렇지 않고 사용자가 취소를 클릭하면 DestroyWindow 호출을 건너뛰고 창이 열린 상태로 유지됩니다. 두 경우 모두 0을 반환하여 메시지를 처리했음을 나타냅니다.

사용자에게 메시지를 표시하지 않고 창을 닫으려면 MessageBox를 호출하지 않고 DestroyWindow만 호출하면 됩니다. 그러나 이 경우 빠르게 진행하는 방법이 있습니다. DefWindowProc는 모든 창 메시지에 대한 기본 작업을 실행합니다. WM_CLOSE의 경우 DefWindowProcDestroyWindow를 자동으로 호출합니다. 즉 switch 문에서 WM_CLOSE 메시지를 무시하면 창이 기본적으로 제거됩니다.

창이 제거되려고 할 때 WM_DESTROY 메시지를 받습니다. 이 메시지는 창이 화면에서 제거된 후 삭제되기 전(특히 자식 창이 제거되기 전에)에 전송됩니다.

주 애플리케이션 창에서 일반적으로 PostQuitMessage를 호출하여 WM_DESTROY에 응답합니다.

case WM_DESTROY:
    PostQuitMessage(0);
    return 0;

창 메시지 섹션에서는 PostQuitMessage가 메시지 큐에 WM_QUIT 메시지를 배치하여 메시지 루프가 종료되도록 한다는 사실을 확인했습니다.

다음은 WM_CLOSEWM_DESTROY 메시지를 처리하는 일반적인 방법을 보여 주는 순서도입니다.

wm-close 및 wm-destroy 메시지를 처리하는 방법을 보여 주는 순서도

다음

애플리케이션 상태 관리