TargeTSan
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору pj7cecv Начнём с кусочка статьи про CDiaog construction из MSDN Код: explicit CDialog( LPCTSTR lpszTemplateName, CWnd* pParentWnd = NULL ); explicit CDialog( UINT nIDTemplate, CWnd* pParentWnd = NULL ); CDialog( ); | Обратите внимание на сигнатуры конструкторов, там есть ваш любимчик из второго примера, принимающий идентификатор ресурса. Поэтому кусок №2 и работает. Теперь вернёмся к куску №1. [telepathy=on] Похоже, первый кусок кода есть метод обработки нажатия какой-то кнопки в классе диалога Dialog15, который сгенерировал добрый дядя визард и отнаследовал от класса CDialog. Теперь дружно вспоминаем, что конструкторы в с++ не наследуются (т.е. явно позвать конструктор предка внутри потомка можно, но потомок конструкторы предка в свой интерфейс не включает). Отсюда следует простой факт, что у класса Dialog15 просто нет конструктора, принимающего идентификатор ресурса. Теперь углубимся в дебри того, что Вы пытаетесь сделать. Во-первых, если обратите внимание на декларацию класса Dialog15, увидите там строчку вида Код: enum { IDD = IDD_чего_то_там; }; | Это означает, что этот класс специализирован для работы с конкретным диалоговым окном, а не со всем подряд, что Вы в него впихнёте. Нет, конечно, можете попытаться, но я почти гарантирую ван неопределённое поведение. А обобщённому классу CDialog в общем-то чихать, на основе какого шаблона работать, т.к. он содержит только общий функционал для работы любого диалогового окна. Если Вам нужно какое-то новое извратное окошко, не поленитесь, создайте кроме ресурса ещё класс диалога к нему. [/telepathy] А вообще в таких случаях предоставляйте хотя бы екларацию проблемного класса, а лучше все исходники (только ж не всей пачкой в сообщение, а прячьте под кат, для этого специально коды форматирования придумали). И прочтите какую-нибудь приличную книгу по своей проблеме. И обзаведитесь MSDN. |