CTAPOBEP
|
|
« : 11-07-2008 10:53 » |
|
Однажды в июльскую жаркую пору я вышел из лесу, в руках - диалог. Здравствуйте, люди добрые (злые нелюди - болейте). Который божий день (который уже?) бьюсь аки зверь мух об стекло и все без пользы. Ибо согрешил я от слабости моей, каюсь, использовал MFC - библиотеку адскую, продукт непотребный. Намедни сотворил я программу, поразить видом своим Заказчика способную. И унаследовал я класс от CDialog, и назвал его CBaseDialog, и расписал его в лучшем виде и увидел, что это хорошо. И унаследовал я все другие окна от CBaseDialog и возрадовался. И решил я добавить окно сообщения в общей стилистике. Тут-то и настигло меня наказанье за грехи мои, ибо функция DoModal() вернула -1 и надсмеялась надо мной многажды. И страшный зверь Начальник когти свои уже... Короче, кто виноват, я знаю. Что делать ? class CBaseDialog: public CDialog { ...
class CMessageDialog: public CBaseDialog { ...
CMessageDialog dlg; if (dlg.DoModal() == -1) AfxMessageBox("Секирбашка");
|
|
« Последнее редактирование: 11-07-2008 12:14 от Вад »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #1 : 11-07-2008 11:17 » |
|
CTAPOBEP, тебе-то хорошо. Времени дофига, чтобы всяким словоблудием заниматься. Покороче сформулируй, без теологических художественных эпитетов. Если конечно ты преследуешь цель получить помощь, а не рисануться своим умением витиевато изъясняться. DoModal работает.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Sla
|
|
« Ответ #2 : 11-07-2008 11:50 » |
|
Да возьмет Старовер в руки, свои "кривые руки" и да расскажет Старовер, нам, умеющим читать, но не могущим понять какой бес мучает его да обернет он свой код в теги [code][/code], чтобы нам презренным мира сего было удобно читать.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Вад
|
|
« Ответ #3 : 11-07-2008 12:13 » |
|
И открыл я MSDN, и познал, что The return value is –1 if the function could not create the dialog box И просветлённый знанием этим, направил стопы свои в исходный код CDialog::DoModal. И прозрел, ибо -1 возвращает сие детище рук человеческих по двум причинам. Первая: // return -1 in case of failure to load the dialog template resource if (lpDialogTemplate == NULL) return -1; и вторая TRY { // ... } CATCH_ALL(e) { DELETE_EXCEPTION(e); m_nModalResult = -1; }
// ...
return m_nModalResult; Правда, сие есть в реализации VS 2005, а как-то в других, не ведаю. Sla, а обращения кода в теги модератор да не погнушается
|
|
« Последнее редактирование: 11-07-2008 12:15 от Вад »
|
Записан
|
|
|
|
|
CTAPOBEP
|
|
« Ответ #5 : 11-07-2008 13:34 » |
|
Вад, то, что not create the dialog box, я вижу собственными глазами. Меня интересует - почему?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #6 : 11-07-2008 14:02 » |
|
Ну, конкретно у меня твоё приложение, во-первых, не компилируется из-за несуществующего файла #include "l.rus\afxres.rc" во-вторых, когда я это закомментировал, произошла ошибка номер раз - не смогло открыть ресурсы для твоего диалога. Вывод - с ними-то, с ресурсами, что-то и накосячено. Детально разбираться уже некогда, рабочий день заканчивается Копать надо, видимо, в том направлении.
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 11-07-2008 15:05 » |
|
CTAPOBEP, да покажу я тебе пример работающего DoModal, да заменишь ты в файле CTestDialog.cpp строку CMessageDialog dlg; на строку CCTestDialogDlg dlg; . И да объяснишь ты, что за мусор в классе CMessageDialog : // Generated OLE dispatch map functions //{{AFX_DISPATCH(CMessageDialog) // NOTE - the ClassWizard will add and remove member functions here. //}}AFX_DISPATCH DECLARE_DISPATCH_MAP() DECLARE_INTERFACE_MAP()
BEGIN_DISPATCH_MAP(CMessageDialog, CBaseDialog) //{{AFX_DISPATCH_MAP(CMessageDialog) // NOTE - the ClassWizard will add and remove mapping macros here. //}}AFX_DISPATCH_MAP END_DISPATCH_MAP()
// Note: we add support for IID_IMessageDialog to support typesafe binding // from VBA. This IID must match the GUID that is attached to the // dispinterface in the .ODL file.
// {77BB4C0F-B72C-4163-A817-078C6D35E4A2} static const IID IID_IMessageDialog = { 0x77bb4c0f, 0xb72c, 0x4163, { 0xa8, 0x17, 0x7, 0x8c, 0x6d, 0x35, 0xe4, 0xa2 } };
BEGIN_INTERFACE_MAP(CMessageDialog, CBaseDialog) INTERFACE_PART(CMessageDialog, IID_IMessageDialog, Dispatch) END_INTERFACE_MAP()
компонент какой то от лукавого ?
|
|
|
Записан
|
|
|
|
CTAPOBEP
|
|
« Ответ #9 : 11-07-2008 16:45 » |
|
"Мусор" ClassWizard напихал и его присутствие или отсутствие ни на что не влияет. Я понимаю, что замена CMessageDialog на CCTestDialogDlg покажет мне окно ) Но! Мне-то нужно модальное окно на основе IDD_DIALOG_MESSAGE и чтобы класс этого окна был унаследован от CBaseDialog, потому что в этом классе до черта кода, который приводит все окна (16 штук) к общему виду. Возможно, я не совсем точно сформулировал вопрос. Речь идет не о функции DoModal() вообще, а о ее категорическом отказе работать в данном конкретном случае.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 11-07-2008 21:52 » |
|
ага... загляни в файл BaseDialog.cpp
там строку : CDialog(CBaseDialog::IDD, pParent)
замени на : CDialog(nIDTemplate, pParent)
а то передаёшь неинициализированную переменную IDD в конструктор CDialog
|
|
|
Записан
|
|
|
|
CTAPOBEP
|
|
« Ответ #11 : 12-07-2008 06:11 » |
|
Ай, молодец! Ай, хороший человек! Ай, спас дедушку! Здоровья - и тебе, и жене твоей, и детям твоим! И пусть удача сопутствует всем начинаниям твоим!
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 12-07-2008 08:58 » |
|
нипадлизывайся ))
|
|
|
Записан
|
|
|
|
|