대화 상자 구현
ATL 프로젝트에 대화 상자를 추가하는 방법에는 ATL 대화 상자 마법사를 사용하거나 수동으로 추가하는 두 가지 방법이 있습니다.
ATL 대화 상자 마법사를 사용하여 대화 상자 추가
클래스 추가 대화 상자에서 ATL 대화 상자 개체를 선택하여 ATL 프로젝트에 대화 상자를 추가합니다. ATL 대화 상자 마법사를 적절하게 입력하고 마침을 클릭합니다. 마법사는 CAxDialogImpl에서 파생된 클래스를 프로젝트에 추가합니다. 보기 메뉴에서 리소스 보기를 열고 대화 상자를 찾은 다음 두 번 클릭하여 리소스 편집기에서 엽니다.
참고 항목
대화 상자가 파생된 CAxDialogImpl
경우 ActiveX 및 Windows 컨트롤을 모두 호스트할 수 있습니다. 대화 상자 클래스에서 ActiveX 컨트롤 지원의 오버헤드를 원하지 않는 경우 CSimpleDialog 또는 CDialogImpl을 대신 사용합니다.
클래스 뷰에서 대화 상자 클래스에 메시지 및 이벤트 처리기를 추가할 수 있습니다. 자세한 내용은 ATL 메시지 처리기 추가를 참조 하세요.
수동으로 대화 상자 추가
대화 상자 구현은 창을 구현하는 것과 비슷합니다. CAxDialogImpl, CDialogImpl 또는 CSimpleDialog에서 클래스를 파생시키고 메시지 맵을 선언하여 메시지를 처리합니다. 그러나 파생 클래스에서 대화 상자 템플릿 리소스 ID도 지정해야 합니다. 이 값을 보유하려면 클래스에 호출 IDD
된 데이터 멤버가 있어야 합니다.
참고 항목
ATL 대화 상자 마법사를 사용하여 대화 상자를 만들면 마법사에서 멤버를 IDD
형식으로 enum
자동으로 추가합니다.
CDialogImpl
를 사용하면 Windows 컨트롤을 호스트하는 모달 또는 모덜리스 대화 상자를 구현할 수 있습니다. CAxDialogImpl
를 사용하면 ActiveX 및 Windows 컨트롤을 모두 호스트하는 모달 또는 모덜리스 대화 상자를 구현할 수 있습니다.
모달 대화 상자를 만들려면 -derived(또는 CAxDialogImpl
-derived) 클래스의 CDialogImpl
인스턴스를 만든 다음 DoModal 메서드를 호출합니다. 모달 대화 상자를 닫려면 메시지 처리기에서 EndDialog 메서드를 호출합니다. 모덜리스 대화 상자를 만들려면 대신 Create 메서드를 호출합니다DoModal
. 모덜리스 대화 상자를 삭제하려면 DestroyWindow를 호출합니다.
싱킹 이벤트는 CAxDialogImpl에서 자동으로 수행됩니다. 파생 클래스의 처리기와 마찬가지로 대화 상자의 메시지 처리기를 구현합니다 CWindowImpl
. 메시지별 반환 값이 있는 경우 반환합니다 LRESULT
. 반환 LRESULT
된 값은 Windows 대화 관리자의 적절한 처리를 위해 ATL에 의해 매핑됩니다. 자세한 내용은 atlwin.h의 CDialogImplBaseT::D ialogProc에 대한 소스 코드를 참조하세요.
예시
다음 클래스는 대화 상자를 구현합니다.
class CMyDialog : public CDialogImpl<CMyDialog>
{
public:
enum { IDD = IDD_MYDLG };
BEGIN_MSG_MAP(CMyDialog)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnBnClickedCancel)
END_MSG_MAP()
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/,
BOOL& /*bHandled*/)
{
// Do some initialization code
return 1;
}
public:
LRESULT OnBnClickedCancel(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
};