Implementar un cuadro de diálogo
Hay dos maneras de agregar un cuadro de diálogo al proyecto ATL: utilice el asistente para cuadros de diálogo ATL o agregarlo manualmente.
Agregar un cuadro de diálogo con el asistente para cuadros de diálogo ATL
En agregue el cuadro de diálogo de la clase, seleccione el objeto de diálogo ATL para agregar un cuadro de diálogo al proyecto ATL.Complete el asistente para cuadros de diálogo ATL según corresponda y haga clic en Finalizar.El asistente agrega una clase derivada de CAxDialogImpl al proyecto.Abra la vista de recursos de menú de Ver , busque el diálogo, y haga doble clic para abrirlo en el editor de recursos.
[!NOTA]
Si el cuadro de diálogo se deriva de CAxDialogImpl, puede hospedar controles ActiveX y controles de Windows.Si no desea la compatibilidad con controles ActiveX en la clase del cuadro de diálogo, utilice CSimpleDialog o CDialogImpl en su lugar.
El mensaje y controladores de eventos se pueden agregar a la clase del diálogo de la vista de clases.Para obtener más información, vea Agregar un controlador de mensajes ATL.
Agregar un cuadro de diálogo Manualmente
Implementar un cuadro de diálogo es similar a implementar una ventana.Derive una clase de CAxDialogImpl, de CDialogImpl, o de CSimpleDialog y declara mapa de mensajes a los mensajes del identificador.Sin embargo, también debe especificar un Id. de recurso de plantilla de cuadro de diálogo en la clase derivada.La clase debe tener un miembro de datos denominado IDD para contener este valor.
[!NOTA]
Cuando se crea un cuadro de diálogo mediante el asistente para cuadros de diálogo ATL, el asistente agrega automáticamente al miembro de IDD como tipo de enum .
CDialogImpl permite implementar un cuadro de diálogo modal o no modal que hospeda los controles de Windows.CAxDialogImpl permite implementar un cuadro de diálogo modal o no modal que hospeda los controles ActiveX y de Windows.
Para crear un cuadro de diálogo modal, cree una instancia de la CDialogImpl-derivado (o CAxDialogImply llama al método de DoModal .Para cerrar un cuadro de diálogo modal, llame al método de EndDialog de un controlador de mensajes.Para crear un cuadro de diálogo no modal, llame al método de cree en lugar de DoModal.Para destruir un cuadro de diálogo no modal, llame a DestroyWindow.
La recepción de eventos automáticamente se hace en CAxDialogImpl.Implemente los controladores de mensajes del cuadro de diálogo como se controladores en CWindowImpl- clase derivada.Si hay un valor devuelto mensaje- concreto, devolverlo como LRESULT.Los valores devueltos de LRESULT deben asignarse ATL para administrar adecuado del administrador del diálogo de Windows.Para obtener información detallada, vea el código fuente para CDialogImplBaseT::DialogProc en atlwin.h.
Ejemplo
La clase siguiente implementa un cuadro 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*/);
};