Partilhar via


Implementando uma caixa de diálogo

Há duas maneiras de adicionar uma caixa de diálogo ao seu projeto ATL: use o Assistente de diálogo ATL ou adicione-o manualmente.

Adicionando uma caixa de diálogo com o Assistente de diálogo ATL

Na caixa de diálogo Adicionar classe, selecione o objeto ATL Dialog para adicionar uma caixa de diálogo ao seu projeto ATL. Preencha o Assistente de Diálogo 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 a 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 do CAxDialogImpl, ela poderá hospedar controles ActiveX e Windows. Se você não quiser a sobrecarga do suporte de controle ActiveX em sua classe de caixa de diálogo, use CSimpleDialog ou CDialogImpl em vez disso.

Os manipuladores de mensagens e eventos podem ser adicionados à sua classe de diálogo a partir do Modo de Exibição de Classe. Para obter mais informações, consulte Adicionando um manipulador de mensagens ATL.

Adicionando uma caixa de diálogo manualmente

A implementação de 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 um ID de recurso de modelo 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 diálogo ATL, o assistente adiciona automaticamente o IDD membro como um enum tipo.

CDialogImpl permite implementar uma caixa de diálogo modal ou não modal que hospeda controlos do Windows. CAxDialogImpl permite implementar uma caixa de diálogo modal ou sem modais que contém controles ActiveX e Windows.

Para criar uma caixa de diálogo modal, crie uma instância da sua classe derivada de CDialogImpl (ou derivada de CAxDialogImpl) e 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 modo modal, chame o método Create em vez de DoModal. Para destruir uma caixa de diálogo sem moderação, chame DestroyWindow.

A captura de eventos é feita automaticamente no CAxDialogImpl. Implemente os manipuladores de mensagens da caixa de diálogo como faria com os manipuladores em uma CWindowImplclasse derivada. Se houver um valor de retorno específico da mensagem, devolva-o como um LRESULT. Os valores retornados LRESULT são mapeados pela ATL para manipulação adequada pelo gerenciador de diálogos do Windows. Para obter detalhes, consulte o código-fonte de 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*/);
};

Ver também

Classes de janela