2010-01-25 5 views
6

Me preguntaba cómo Visual Studio asocia MFC CDialog clases derivadas con sus recursos de diálogo correspondientes. No estoy interesado en cómo se realiza la conexión en tiempo de ejecución (como se le preguntó here), sino más bien en el momento del diseño.¿Cómo asocia Visual Studio clases de diálogo de mfc con recursos de diálogo?

Cuando agrego un manejador de mensajes a un cuadro de diálogo, ¿cómo sabe a qué clase agregar el controlador? Además, ¿es posible tener varias clases derivadas CDialog asociadas con el mismo recurso de diálogo y viceversa?

He buscado en el directorio del proyecto para la cadena IDD_SOMEDIALOG pero sólo lo he encontrado en SomeDialog.h, resource.h y Project.rc en los lugares previstos, así que supongo que de alguna manera deduce la conexión de esos archivos, más probable es que la enumeración en SomeDialog.h:

// in class CSomeDialog: 
    enum { IDD = IDD_SOMEDIALOG }; 

Lo pido principalmente por curiosidad.

Respuesta

4

Depende de qué versión de dev studio.

En VS6 todo se guardaba en el CLW (archivo de asistente de clase).

En las versiones más nuevas de dev studio ya no usa el CLW y no sé específicamente cómo lo sabe, pero sospecho que es un análisis en vivo en lugar de usar un CLW en caché.

En cuanto a tener múltiples diálogos derivados utilizando el mismo recurso, se puede hacer manualmente. Puede duplicar los archivos de clase creados y cambiarles el nombre, eliminar la enumeración del encabezado y editar el uso de la enumeración de IDD en el archivo de origen para que sea el ID del recurso de diálogo real (IDD_SOMEDIALOG).

AFAIK Dev Studio solo 'felizmente' manejará una clase a un diálogo a la vez. En mi experiencia, tratar de reutilizar un recurso de diálogo como este acaba en una batalla con MFC & Dev Studio ya que no estaban destinados a hacer esto.

+0

Este definitivamente parece ser el caso, ver mi actualización para más detalles. –

2

Para añadir a la respuesta de Ruddy:

me di cuenta de que algunas de mis clases de diálogo en el que sustituyó a la enum { IDD } con static const int IDD no fue por más tiempo asociado con su recurso de diálogo. Volviendo a la enumeración, vuelve a asociarlos. Parece que Visual Studio analiza el código fuente para determinar las relaciones.

En cuanto al intercambio de recursos, sería ambiguo qué clase debería recibir el código del controlador de eventos. El intercambio de clases parece ser imposible ya que depende del IDD que no se puede asignar a un IDD_SOMETHING y IDD_SOMETHING_ELSE simultáneamente.

Cuestiones relacionadas