Partilhar via


Implementar uma caixa de diálogo

Há duas maneiras de adicionar uma caixa de diálogo ao seu projeto da ATL: usar o assistente de caixa de diálogo da ATL ou adicioná-lo manualmente.

Adicionar uma caixa de diálogo com o assistente de caixa de diálogo da ATL

Na caixa de diálogo Adicionar Classe, selecione o objeto Caixa de Diálogo da ATL para adicionar uma caixa de diálogo ao projeto da ATL. Preencha o assistente de caixa de diálogo da ATL conforme apropriado e clique em Concluir. O assistente adiciona uma classe derivada de CAxDialogImpl ao seu projeto. Abra o Modo de Exibição de Recursos no menu Exibir, localize sua caixa de diálogo e clique duas vezes nela para abri-la no editor de recursos.

Observação

Se a caixa de diálogo for derivada de CAxDialogImpl, ela poderá hospedar controles ActiveX e Windows. Se você não quiser a sobrecarga do suporte ao controle ActiveX em sua classe da caixa de diálogo, use CSimpleDialog ou CDialogImpl.

Os manipuladores de eventos e mensagens podem ser adicionados à classe da caixa de diálogo do Modo de Exibição de Classe. Para obter mais informações, confira Adicionar um manipulador de mensagens da ATL.

Adicionar uma caixa de diálogo manualmente

Implementar uma caixa de diálogo é semelhante à implementação de uma janela. Você deriva uma classe de CAxDialogImpl, CDialogImpl ou CSimpleDialog e declara um mapa de mensagens para manipular mensagens. No entanto, você também deve especificar uma ID de recurso de modelo de caixa de diálogo em sua classe derivada. Sua classe deve ter um membro de dados chamado IDD para manter esse valor.

Observação

Quando você cria uma caixa de diálogo usando o assistente de caixa de diálogo da ATL, o assistente adiciona automaticamente o membro IDD como um tipo enum.

CDialogImpl permite implementar uma caixa de diálogo modal ou sem janela restrita que hospeda controles do Windows. CAxDialogImpl permite implementar uma caixa de diálogo modal ou sem janela restrita que hospeda controles do Windows ou ActiveX.

Para criar uma caixa de diálogo modal, crie uma instância da classe derivada de CDialogImpl (ou derivada de CAxDialogImpl) e, em seguida, chame o método DoModal. Para fechar uma caixa de diálogo modal, chame o método EndDialog de um manipulador de mensagens. Para criar uma caixa de diálogo sem janela restrita, chame o método Create em vez de DoModal. Para destruir uma caixa de diálogo sem janela restrita, chame DestroyWindow.

Os eventos do coletor são feitos automaticamente no CAxDialogImpl. Implemente os manipuladores de mensagens da caixa de diálogo como faria com os manipuladores em uma classe derivada de CWindowImpl. Se houver um valor retornado específico da mensagem, retorne-o como um LRESULT. Os valores LRESULT retornados são mapeados pela ATL para tratamento adequado pelo gerenciador da caixa de diálogo do Windows. Para obter detalhes, confira o código-fonte para CDialogImplBaseT::DialogProc em atlwin.h.

Exemplo

A seguinte classe implementa uma caixa de diálogo:

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*/);
};

Confira também

Classes de janela