Способ, которым это обычно делается в MFC, состоит в том, чтобы определить шаблон диалога в редакторе ресурсов (как вы сделали), затем в C ++ извлечь класс из CDialog и связать его с шаблоном диалога (который звучит так, как вы). сделали - не совсем понятно).
То, что на самом деле связывает эти два, - это конструктор вашего кода CDialog. Если вы посмотрите на связанный с диалогом код, автоматически сгенерированный мастером класса MFC, вы увидите в реализации конструктора что-то вроде этого:
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(CMyDlg::IDD, pParent)
где CMyDlg :: IDD определяется как перечисление со значением идентификатора вашего нового диалогового шаблона. Это то, что делает все это, а не объявление перечисления. Вы можете изменить его на
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/) : CDialog(IDD_NEW_DIALOG, pParent)
и все равно будет работать (при условии, что IDD_NEW_DIALOG - это идентификатор шаблона вашего диалога в ресурсах), поскольку все, что происходит, - это то, что идентификатор диалога передается в конструктор.
В общем, всегда стоит помнить, что, несмотря на первоначальные появления, MFC не связывается с Windows через бит магии компилятора - все это делается с C ++ и несколькими макросами.
РЕДАКТИРОВАТЬ: DIALOGEX и DIALOG объявляют слегка различающиеся форматы ресурсов диалога, которые понимает Windows: первый новее, чем второй. Однако оба они существовали, по крайней мере, начиная с Windows 95, так что это не очень существенное различие.