ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 모달리스 대화상자
    개발/지름 2007. 11. 10. 06:24
    반응형
    1. Modal 과 Modeless
    Modal은 대화상자가 출력되고 있는 동안 프로그램의 모든 제어권을 독점하고 있어 대화상자가 종료되기전까지 다른 작업을 할 수가 없다.
    Modeless는 대화상자가 출력되고 있는 동안에도 다른 작업을 할 수가 있다.

    2. 대화상자 출력시 차이점

    구분 Modal Modeless
    생성 DoModal Create
    종료 EndDialog DestroyWindow
    인스턴스 선언 지역변수 동적할당

    - Modeless는 DoModal 함수로 생성된 것이 아니기 때문에 EndDialog를 사용할 수 없다.
    - IDOK 또는 IDCANCEL 같은 ID를 가진 버튼을 만들지 않는 것이 좋으며 꼭 이 버튼을 추가해야 할 경우에는 OnOK 와 OnCancel 같은 함수를 재정의하고 그 안에서 CDialog 클래스의
    OnOK 함수나 OnCancel 함수가 호출되지 않도록 해 주어야 한다.

    3. Instance 생성과 해제

    Modeless 대화상자를 프로그램 전체에서 사용할 수도 있는데 그럴 경우 CMainFrame, XXApp, CXXXView, CXXXDoc등의 멤버로 CModelessDlg를 선언하고 필요할 경우 생성/해제 하는 방법을 사용해도 된다.
    - 필요할 때 생성하는 방법은 아래와 같다

    CModelessDlg *pDlg = new CModelessDlg;
    pDlg->Create(IDD_MODELESS);
    pDlg->ShowWindow(SW_SHOW);


    - 이 코드는 대화상자를 닫게 만든다.

    void CModelessDlg::OnBnClickedClose()
    {
    // TODO: Add your control notification handler code here
    DestroyWindow();
    }


    *대화상자를 만들면서 동적 메모리를 할당한 것이 있다면 이것도 해제시켜 주어야 하는데 이것은 PostNcDestroy()에서 해주면 된다. PostNcDestroy()는 대화상자가 완전히 소멸된 후에 호출되기 때문에 안전하게 삭제할 수 있다.

    void CModelessDlg::PostNcDestroy()
    {
    // TODO: Add your specialized code here and/or call the base class
    delete this;

    //CDialog::PostNcDestroy();
    }
    반응형

    댓글

Designed by Tistory.