Implementación de cuadros de diálogo
Hay dos maneras de agregar un cuadro de diálogo a un proyecto ATL: usar el Asistente para cuadros de diálogo de ATL o agregarlo manualmente.
En el cuadro de diálogo Agregar clase, seleccione el objeto Cuadro de diálogo de ATL para agregar un cuadro de diálogo al proyecto de ATL. Rellene el Asistente para cuadros de diálogo de ATL según corresponda y haga clic en Finalizar. El asistente agrega una clase derivada de CAxDialogImpl al proyecto. Abra Vista de recursos en el menú Ver, busque el cuadro de diálogo y haga doble clic en él para abrirlo en el editor de recursos.
Nota
Si el cuadro de diálogo se deriva de CAxDialogImpl
, puede hospedar controles ActiveX y de Windows. Si no desea la sobrecarga de la compatibilidad con controles ActiveX en una clase cuadro de diálogo, use CSimpleDialog o CDialogImpl en su lugar.
Se pueden agregar controladores de eventos y de mensajes a una clase cuadro de diálogo desde Vista de clases. Para más información, consulte Adición de un controlador de mensajes de ATL.
La implementación de un cuadro de diálogo es similar a la de una ventana. Derive una clase de CAxDialogImpl, CDialogImpl o CSimpleDialog y declare una asignación de mensajes para controlar los mensajes. Sin embargo, también debe especificar un identificador de recursos de plantilla de cuadro de diálogo en la clase derivada. La clase debe tener un miembro de datos denominado IDD
que contenga este valor.
Nota
Al crear un cuadro de diálogo mediante el Asistente para cuadros de diálogo de ATL, el asistente agrega automáticamente el miembro IDD
como un tipo 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 de Windows como ActiveX.
Para crear un cuadro de diálogo modal, cree una instancia de la clase derivada de CDialogImpl
(o derivada de CAxDialogImpl
) y, después, llame al método DoModal. Para cerrar un cuadro de diálogo modal, llame al método EndDialog desde un controlador de mensajes. Para crear un cuadro de diálogo no modal, llame al método Create, en lugar de DoModal
. Para destruir un cuadro de diálogo no modal, llame a DestroyWindow.
Los eventos del receptor se realizan automáticamente en CAxDialogImpl. Implemente los controladores de mensajes del cuadro de diálogo como lo haría con los controladores de una clase derivada de CWindowImpl
. Si hay un valor devuelto específico del mensaje, devuélvalo como LRESULT
. ATL asigna los valores de LRESULT
devueltos para que el administrador de diálogos de Windows los controle correctamente. Para más información, consulte el código fuente de CDialogImplBaseT::D ialogProc en atlwin.h.
La siguiente clase 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*/);
};