zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« : 27-02-2009 11:55 » |
|
Говорят, в Microsoft Visual Studio 2008 Professional Edition компилятор существенно лучше. Скомпилированные программы работают быстрее, чем в Microsoft Visual С++ 6.
1. Действительно ли настолько лучше или разница небольшая, хотелось бы ссылку на статью с тестами этих версий между собой или как-то самому можно это выяснить?
Если нет практически никакой разницы, тогда ещё два вопросика:
2. В Microsoft Visual С++ 6 размер SP6 примерно в два раза меньше чем SP5, это значит, что я должен для нормальной работы установить SP5, а затем SP6, я-то думал, что все заплатки из старого SP переходят в новый и плюс новые заплатки?
3. Зачем нужно в Microsoft Visual С++ 6 при использовании функции timeGetTime подключать библиотеку #pragma comment(lib, "winmm.lib"), а если не подключать библиотеку, то при запуске программы возникает ошибка text.obj : error LNK2001: unresolved external symbol __imp__timeGetTime@0, я её в компиляторе borland не подключал, она и так работала, да и во многих примерах для Microsoft Visual не написано про это?
Помогите, пожалуйста, разобраться.
|
|
« Последнее редактирование: 06-09-2009 16:08 от Sel »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 28-02-2009 18:19 » |
|
zuze, по твоей просьбе, моё сугубо личное видение : когда новые проекты начну делать - попробую 2008 студию, однако пока что писал только под VC6 . Скорость работы программ пока устраивает. Сервис паков никаких не ставил насчёт вопроса 3 - в либе описано для линковщика, где взять функцию, вот и всё. Не заморачивайся по этому поводу )
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #2 : 28-02-2009 20:02 » |
|
Понял. Большое спасибо что посмотрел!!!
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #3 : 28-02-2009 20:04 » |
|
Ок, тогда и моё Насколько я помню, у компилятора 6й студии есть недостатки, связанные с неполной поддержкой стандарта C++. Впрочем, дело тут даже не столько в компиляторе (хотя, если говорить о производительности, то определённый прогресс с годами всё-таки есть, но не могу сказать, насколько значимый прирост производительности). Дело просто в том, что 2008я студия - более современная, нежели VS 6.0. Лично мне от версии к версии (6.0, 7.1, 8.0, наконец 2008я - 9.0, вроде) всё проще пользоваться VS: среда становится удобнее. Плюс, попутный набор библиотек тоже более современный: так, ещё со студией 7.1 поставлялась версия STL, не полностью соответствовавшая стандарту языка. Можно, конечно, тащить все эти библиотеки со стороны (тот же STLPort) - но зачем? В общем, я соглашусь с Алексеем: старые проекты вполне можно поддерживать и старыми средствами (хотя бы по соображениям предсказуемости этих средств), но лучше пользоваться современными инструментами везде, где это возможно.
|
|
|
Записан
|
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #4 : 28-02-2009 20:08 » |
|
Понял.Вот Вы Вад писали что Насколько я помню, у компилятора 6й студии есть недостатки, связанные с неполной поддержкой стандарта C++. Наверно я реально сложных проектов не писал, где бы проявилась с неполной поддержкой стандарта C++ в Microsoft Visual С++ 6. В моих программах написанных на Microsoft Visual С++ 6 и на Microsoft Visual Studio 2008 Professional Edition разницы не было. Всё всегда нормально работало.
|
|
« Последнее редактирование: 28-02-2009 20:15 от zuze »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #5 : 28-02-2009 20:46 » |
|
zuze, Ну самый распространенный прикол 6 студии for(int i=0; i<10; i++) //Do something ; for(int i=0; i<10; i++) //Do something;
Этот код в шестерке нельзя скомпилировать. Будет ругаться, что повторное определение переменной i, хотя по стандарту все переменные определенные в теле цикла, принадлежат к зоне видимости самого цикла. Я лично сразу столкнулся с таким приколом, когда переполз с борланда в студию.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
zuze
Опытный
Offline
Пол:
Россия, Москва
|
|
« Ответ #6 : 01-03-2009 06:27 » |
|
Я с этим не сталкивался из-за того что мне всегда где много циклов было, нужно это значение куда-то запоминать модифицировать и т.д. и я делал разные переменные. Но вы меня заинтересовали этим и я решил проверить, действительно не работает, но легко можно поправить. Ну этот прикол в Microsoft Visual C++ 6.for(int i=0; i<10; i++) for(int i=0; i<10; i++)
Легко поправить.int i; for(i=0; i<10; i++) for(i=0; i<10; i++)
Интересно если статья посвещённая таким вещам в интернете, если есть ссылочку дайте пожалуйста интересно будет почитать и проверить на практике то что написано?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #7 : 01-03-2009 06:31 » |
|
zuze, Ну самый распространенный прикол 6 студии for(int i=0; i<10; i++) //Do something ; for(int i=0; i<10; i++) //Do something;
Этот код в шестерке нельзя скомпилировать. Будет ругаться, что повторное определение переменной i, хотя по стандарту все переменные определенные в теле цикла, принадлежат к зоне видимости самого цикла. Я лично сразу столкнулся с таким приколом, когда переполз с борланда в студию. хм, а вот я никогда так не делал и не сделал бы
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #8 : 01-03-2009 08:17 » |
|
Finch, так все логично. Ведь, как компилятору определить в теле вложенного цикла какую переменную i использовать - своего цикла или внешнего цикла.
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #9 : 01-03-2009 12:45 » |
|
zubr, Это не вложенные цикли А два раздельных цикла. Чтоб показать это, я специально закрыл точкой с запятой. Алексей1153++, Просто я всегда стараюсь использовать i в качестве переменной цикла. И сталкивался несколько раз, когда в теле одного блока мне нужно было делать несколько циклов. Простой пример. Я как-то убирал шум с черно белой картинки, Нужно было делать два прохода. Первый сверху вниз, второй снизу наверх. Причем второй проход зависил от результатов первого. Тут в один цикл это не сольёш. Кстати были еше несколько глюков 6 студии. Но довольно мелькие. Поэтому я и не запомнил.
|
|
« Последнее редактирование: 01-03-2009 12:49 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #10 : 01-03-2009 12:52 » |
|
Finch, для двух циклов - определить можно перед циклами, как zuze , а ты точку с запятой не поставил - она у тебя закомментирована ) У тебя вложенный цикл
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #11 : 01-03-2009 13:18 » |
|
Алексей1153++, Скажем так, я привел схему. Заместо Do Something естественно будет что то более сушественное чем просто коментарий. Ну в принципе для совместимости я и делал как zuze. Хотя в 6 студии если убрать int во втором цикле, то компилятор не будет иметь ничего против.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #12 : 01-03-2009 14:07 » |
|
Finch, можно и во втором только убрать, но тогда будет некрасиво
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 04-09-2009 02:45 » |
|
вопрос такой: в VC6 , если применять более или менее вложенные шаблоны, можно наткнуться на ахтунг, когда компилятор выдаёт кучу-кучу предупреждений о том, что для дебаггера имя идентификатора порезано до 255 символов (ну да, он там длинновато выглядит внутри). Само по себе не страшно, но компиляция очень тормозится, да и output замусорен... В студии №9 такой проблемы нет (наверное, увеличили до 65535)
1) как в №6 заставить компилятор игнорировать и не показывать предупреждения ? 2) либо - как с этим бороться (уменьшения длин имён классов не помогает)
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #14 : 04-09-2009 03:15 » |
|
// Disable warning messages 4507 and 4034. #pragma warning( disable : 4507 34 )
// Issue warning 4385 only once. #pragma warning( once : 4385 )
// Report warning 4164 as an error. #pragma warning( error : 164 )
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #15 : 04-09-2009 03:20 » |
|
а не отключается. Может , я не туда вставил, конечно. Я пробовал в хедере шаблона
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #16 : 04-09-2009 03:31 » |
|
Какой номер ?
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #17 : 04-09-2009 03:34 » |
|
#pragma warning( disable : 4786 )
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #18 : 04-09-2009 03:38 » |
|
Вставь директиву перед всеми подключениями заголовков.
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #19 : 04-09-2009 03:45 » |
|
всё равно не отключается
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #20 : 04-09-2009 03:53 » |
|
Где поставил? В .сpp? Не может быть что не отключается... Надо что бы директива была выполнена до первого использования шаблона (код из MSDN) // compile options required: /Zi /GX #include <iostream> #include <string> #include <map>
// move this pragma before the includes above to disable the //C4786 warnings #pragma warning (disable : 4786)
int main () { using namespace std; map<int,string> m; m[0] = "hello world"; cout << m[0] << endl;
return 0; }
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #21 : 04-09-2009 03:58 » |
|
и там тоже ставил ( Всё равно ругаецо
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #22 : 04-09-2009 03:59 » |
|
кстати, вроде как есть опция /wd4786 для компилятора, так он в VC6 пишет, что опция неизвестна и игнорируется ))
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #23 : 04-09-2009 04:28 » |
|
Гм. However, this method does not disable all such warnings in Visual C++ version 6.0. The occurrence of many C4786 warnings may result in the following: C1033 error: cannot open program database 'vc60.pdb'. Use the pragma directive before you include any STL headers to disable the warnings.
Попробуй поднять выше include объявлений. P.S.: Позырь KB167355...
|
|
« Последнее редактирование: 04-09-2009 04:35 от sss »
|
Записан
|
while (8==8)
|
|
|
sss
Специалист
Offline
|
|
« Ответ #24 : 04-09-2009 04:39 » |
|
Можно еще изменить уровень с W1 на W4 #pragma warning( 4 : 4786)
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #25 : 04-09-2009 04:46 » |
|
всё едино так же )
|
|
|
Записан
|
|
|
|
sss
Специалист
Offline
|
|
« Ответ #26 : 04-09-2009 05:24 » |
|
Покажи место в коде.
|
|
|
Записан
|
while (8==8)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #27 : 04-09-2009 05:31 » |
|
код большой
щас попробую абстракцию соорудить
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #28 : 04-09-2009 05:45 » |
|
всё, источник ног проблемы нашёлся Векторный инклуд был в stdafx.h , там и надо было перед ним прагму вставить. Тогда не ругается больше. тестовый код такой template<class B,class C,class D> class A { public: class X0123456789012345678901234567890123456789 { B b; C c; D d; }; };
std::vector< A<int,int,int>::X0123456789012345678901234567890123456789> v;
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #29 : 18-09-2009 08:30 » |
|
в студии 2008: есть ли встроенный SDK для MySQL 5(+) ? Если есть, что и как называется и где лежит ?
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #30 : 18-09-2009 11:21 » |
|
Смотри библиотеки ADO, по крайней мере в ADO.NET я точно знаю, что была возможность подключения. Или зайди на сайт Sun и посмотри у них?
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #31 : 18-09-2009 14:59 » |
|
.NET мне вроде не надо (Боже упаси!!!) , а что за сайт Sun ?
|
|
|
Записан
|
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #34 : 18-09-2009 15:37 » |
|
вау, Финч, спасибо )
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #35 : 20-09-2009 10:22 » |
|
Sun Microsystems довольно известная фирма, в прошлом году они купили MySQL. А потом Oracle купил их обоих
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #36 : 20-09-2009 10:27 » |
|
да мне, в принципе, по барабану, кто там кого купил Лишь бы бесплатно их трудами попользоваться
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #37 : 25-12-2009 04:09 » |
|
сумел сконвертировать большой проект из 6 в 9 Это, оказывается, всё-таки возможно. Только косметические погрешности пришлось пол ночи править, а в остальном - всё без боли) Поменялось (из запомнившегося): 1) ну, естественно, ругань на strcpy и подобные (где длина массива явно не указана) 2) в классах CDataBase и CRecordset - когда возвращается набор записей, для строк VARCHAR тип имеет значение DBVT_ASTRING (а в 6 было DBVT_STRING) 3) ну и мелкие придирки по приведению типов
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #38 : 25-12-2009 08:11 » |
|
вот и не знаю даже, на что теперь списать, но происходит следующая жопа : Любителям списков инициализации посвящается. есть структура struct A { WORD m_w; const void* m_v; DWORD m_dwd;
A(WORD w,const void* v,DWORD dwd) :m_w(w) ,m_v(v) ,m_dwd(dwd) { } };
1) A a(0x2233,(void*)0x44556677,0x8899aabb);
//имеем в озу 33 22 cc cc 77 66 55 44 bb aa 99 88
//в человеческом виде: a.m_w==0x2233; a.m_v==0x6677cccc; //cccc - это дебажный мусор; из-за от выравнивания a.m_dwd==0x5544bbaa;
2) делаем выравнивание #pragma pack(push,1) struct A { ... }; #pragma pack(pop)
A a(0x2233,(void*)0x44556677,0x8899aabb);
//имеем в озу 33 22 77 66 55 44 bb aa 99 88
//в человеческом виде: a.m_w==0x2233; a.m_v==0x44556677; a.m_dwd==0x8899aabb;
-теперь всё нормально. Этот "говнозаезд" происходит не повсюду в программе, а конкретно в одном месте (файле). Почему - пытаюсь понять уже день (( А, да, студия № 2008 (VS9) ps извиняюсь перед девушками за ругань
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #39 : 25-12-2009 08:27 » |
|
в 6-й студии, похоже, это тоже было. Думал - глюки компилятора (ну так и выходит )) ), поэтому поднатужился и конвертировал в 9-ю студию (бубен спас ). А тут на те...
|
|
|
Записан
|
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #40 : 25-12-2009 14:26 » |
|
Алексей1153++, сколько битное приложение и ОС? void * p = (void *)0x44556677; чему равно p?
|
|
|
Записан
|
С уважением Lapulya
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #41 : 26-12-2009 02:54 » |
|
Всё 32-битное. p==0x44556677 естессно
|
|
|
Записан
|
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #42 : 26-12-2009 12:06 » |
|
Алексей1153++, Хммм, а так (хотя это одно и то же)?
void * p = (void *)0x44556677; A a(0x2233, p, 0x8899aabb);
Короче очень странно (перезагрузка + ребилд ол = точно не помешают).
|
|
|
Записан
|
С уважением Lapulya
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #43 : 26-12-2009 15:07 » |
|
lapulya, у меня подозрение на другое - где-то инклуд вставляется два раза, причём где-то под разными pragma pack. (это, кстати, тот самый мутный большой проект, про который я говорил )) ) . Сейчас искать это некогда, сразу не обнаружилось. Пока обошёлся заколдовыванием всего проекта на выравниванием по 1.
Кстати, а прагма pack влияет на выравнивание только элементов класса, или ещё и на размещение параметров функции в стеке ?
|
|
|
Записан
|
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #44 : 26-12-2009 19:19 » |
|
По идее только в структуре и в классе, но точно не помню (я ж теоретик лет 5 - 6 как ) Кстати, если сроки горят и уже занесен серп над .... над ними... то все средства хорошо, но такую жопу надо исправлять в первый же свободный момент (все что не понятно и должно работать, но не работает и все что работает, но непонятно почему, должно быть переписано ИМХО) Смени название класса (можно для верности сменить название файла, в котором он объявлен)
|
|
« Последнее редактирование: 26-12-2009 19:25 от lapulya »
|
Записан
|
С уважением Lapulya
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #45 : 27-12-2009 03:01 » |
|
конечно, на досуге поищу косяк
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #46 : 27-12-2009 04:08 » |
|
Нашёл место возможного источника глюка: незакрытая прагма с единичкой (завтра на работе убедюсь, но вроде это оно) #pragma pack(push, 1) //структуры ... ...
//тут пропущен pragma pack(pop) !!!
//а тут как раз инклуд, где галиматья и возникает #include "xxxx.h"
... ...
|
|
|
Записан
|
|
|
|
lapulya
Молодой специалист
Offline
|
|
« Ответ #47 : 27-12-2009 22:28 » |
|
Ппц во люди пишут... поди потом разберись...
|
|
|
Записан
|
С уважением Lapulya
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #48 : 12-02-2010 11:00 » |
|
В связи с тем же переходом с 6 на 9. Имеется такая система окошек: CWnd A; //CMainFrame CWnd B; //немодальный CDialog B.Create(&A,...); //A - родитель для B тут A и B могут "независимо" друг от друга двигаться по экрану и получать фокус. CDialog C(&B); //модальный диалог, B - родитель для C C.DoModal(); Теперь самое имнтересное: в студии 6 было так: B блокировано, а C и A - "независимо" друг от друга работают. В студии 9, видать, глюк исправили: теперь A и B блокируются при открытии С . А клиент привык, что A доступно во время работы C! А как этого теперь добиться, я понять не могу
|
|
« Последнее редактирование: 12-02-2010 11:05 от Алексей1153++ »
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #49 : 12-02-2010 12:10 » |
|
Лёш, кинь тестовый проектик. Хочу попробовать одну штуку, а набирать времени нет.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #50 : 12-02-2010 15:33 » |
|
Джон, щас, сделать нужно. А тебе в какой студии ? Ну я, собственно, сделаю в 6, потом портирую в девятку
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #51 : 12-02-2010 16:11 » |
|
1) блин, так приятно всё в шестой версии сделано, я уж и забыл Всё быстро, удобно, всё под рукой, вай вай.... Только подсказки не всегда выползают ))) 2) кое-что обнаружил, исследую
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #52 : 12-02-2010 17:20 » |
|
результаты вскрытия:
1) студия №6: если создавать немодальный диалог в конструкторе родительского окна (указав this), то модальный диалог C не блокирует окно A . Если же создавать в OnInitialUpdate (или OnInitDialog) , то всё блокируется как надо
2) студия №9: разницы от места создания диалога нету
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #53 : 12-02-2010 17:37 » |
|
Мне в 9ой, в 6ке же всё "работает".
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #54 : 12-02-2010 17:40 » |
|
Блин, а у меня дома её нету...
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #55 : 12-02-2010 17:42 » |
|
В 2005 студии заперто всё. А В С.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #56 : 12-02-2010 18:36 » |
|
В 2005 студии заперто всё. А В С.
не спорю, хотя я там не пробовал Вопрос в том, как повторить этот глюк в 2008-й (или в 2005) студии ? Я даже стили и EX стили окошек распечатал - они одинаковые в обоих случаях
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #57 : 12-02-2010 19:27 » |
|
Ну сделай так, чтобы A не был родителем B, раз тебе надо, чтобы A не блокировался.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #58 : 12-02-2010 19:33 » |
|
хм, попробую ) Я 0 подставлял - результат не менялся, но 0 - это, наверное, эквивалентно главному окну приложения
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #59 : 12-02-2010 19:50 » |
|
неа, дохлый номер Оно и понятно: если родителем сделать некое левое окно X, то у него тоже указывается родитель. А это блокирует главное окно всё равно при открытии модального окна
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #60 : 13-02-2010 13:16 » |
|
Не понял. Вроде окна блокируются по цепочке от модального через родители до основного, Дети заблокированных родителей тоже блокируются?
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #61 : 13-02-2010 13:51 » |
|
Нет, не блокируются но A - это главное окно. Что-то сильно курочит программу не хочется. Но я сейчас (как и вчера вечером) уже устал от активного дня и туплю, наверное
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #62 : 13-02-2010 14:20 » |
|
Поскольку в .NET Windows.Forms - тоже лишь обёртка над WinAPI, то написал тест: using System; using System.Windows.Forms;
namespace TestForms { class MainClass { private static Form CreateForm(string name) { Form form = new Form(); form.Text = name; return form; } private static void Test1(Form a, Form b, Form c) { a.Show(); b.Show(a); c.ShowDialog(b); }
private static void Test2(Form a, Form b, Form c) { a.Show(); b.Show(); c.ShowDialog(b); } delegate void Test(Form a, Form b, Form c); public static void Main (string[] args) { Test[] tests = new Test[] { new Test(Test1), new Test(Test2) }; for(int i = 0; i < tests.Length; i++) { Console.WriteLine(string.Format("Test {0}. Press ENTER to start.", i + 1)); Console.ReadLine(); Form a = CreateForm("A"); Form b = CreateForm("B"); Form c = CreateForm("C"); tests[i](a, b, c); Application.Run(a); } Console.WriteLine("Finished. Press ENTER to exit."); Console.ReadLine(); } } } Вижу, что всё нормально. Достаточно убрать из b owner-ссылку на a. Так что в крайнем случае можно обратиться непосредственно к WinAPI.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #63 : 13-02-2010 14:49 » |
|
Достаточно убрать из b owner-ссылку на a
если родителя не указать (а по умолчанию это 0) , то: virtual BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL ); pParentWnd - Points to the parent window object (of type CWnd) to which the dialog object belongs. If it is NULL, the dialog object's parent window is set to the main application window.
а главное у нас -это А
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #64 : 13-02-2010 15:15 » |
|
Ну это прибабахи MFC. Иди своим путём
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #65 : 13-02-2010 15:27 » |
|
m_B_init.SetParent(0); - не спасает тоже )))
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #66 : 14-02-2010 19:43 » |
|
Лёш, завтра на работе уже с 9ой буду пробовать что хотел, чтобы не нарушать чистоты эксперимента.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #67 : 14-02-2010 19:51 » |
|
хорошо )
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #68 : 15-02-2010 08:43 » |
|
Лёш, не получилось пока. Dimka, я бы не стал проводить такую аналогию только потому, что MFC и .NET обёртки над Win API. Не однозначно, что ShowDialog вызывает именно модальный DialogBox. Это может быть и просто окно.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #69 : 15-02-2010 08:49 » |
|
Джон, тем не менее, работает это окно как модальный диалог, т.е. родители этого окна оказываются недоступными для пользовательских действий.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #70 : 15-02-2010 09:38 » |
|
Джон, я согласен, что дело именно в MFC - ведь в 6 студии работает так, а в 9 - иначе. А винда то не поменялась
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #71 : 15-02-2010 11:02 » |
|
Джон, тем не менее, работает это окно как модальный диалог, т.е. родители этого окна оказываются недоступными для пользовательских действий. Согласен. Просто есть разные способы создать модальное окно (вплоть до вырубания родительского) и я думаю, что в .NET используется самый универсальный, более того, в данном случае я бы сразу стал кричать что-то типа: А НАФИГА ОНО ТАКОЕ НУЖНО? и БАГ НАДО БЫЛО ЕЩЁ В 6ке УБИРАТЬ! Но, зная Лёшку, с его: "А я так хочу!", просто хотел попробвать поиграться с Owner.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #72 : 15-02-2010 11:09 » |
|
Прикол. Дело в логике: Димка, как тебе такое : namespace Test1 { public partial class FormA : Form { public FormA() { InitializeComponent(); }
private void _showModelessDlgToolStripButton_Click(object sender, EventArgs e) { FormB dlg = new FormB(); dlg.Show(); } } } namespace Test1 { public partial class FormB : Form { public FormB() { InitializeComponent(); }
private void _showDlgCButton_Click(object sender, EventArgs e) { FormC dlg = new FormC(); dlg.ShowDialog(); } } } А и В недоступны после запуска С.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #73 : 15-02-2010 11:20 » |
|
Но, зная Лёшку, с его: "А я так хочу!",
вообще-то, мне как раз красивее, как в 9-ке. Это клиент привык, это ЕМУ так нужно
|
|
« Последнее редактирование: 15-02-2010 11:22 от Алексей1153++ »
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #74 : 15-02-2010 11:24 » |
|
Джон, не понял, к какому из вариантов относится приложенный exe. А, это вызовы форм. Вопрос снят. Из MSDN: If you use the version of this method that has no parameters, the dialog box being shown would be owned automatically by the currently active window of your application. По-моему, ключевое - "active window". Давайте посмотрим с точки зрения WinAPI. Модальность ведь обеспечивается тем, что цикл обработки сообщений переходит к модальному окну... Если в этом цикле помимо модального обслуживаются другие окна, то они будто бы должны быть живы. Или я неправильно понимаю?
|
|
« Последнее редактирование: 15-02-2010 12:04 от Dimka »
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #75 : 15-02-2010 12:08 » |
|
Да, я просто повторил вызовы как в лёшкином примере. Даже если я вызываю немодальное окно явно с нулём: private void _showModelessDlgToolStripButton_Click(object sender, EventArgs e) { FormB dlg = new FormB(); dlg.Show(null); }
Форма А всё-равно недоступна.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #76 : 15-02-2010 12:11 » |
|
Можно по такой схеме сделать: a.Show(); b.Show(a); b.Enabled = false; c.Show(b);
Но следует учитывать, что вызов Show несинхронный, т.е. программа не будет ждать закрытия окна.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #77 : 15-02-2010 12:20 » |
|
Да вот и мне чёт тоже ничего умней в голову не приходит. Но это как-то... неспортивно...
Короче, Лёш, если надо быстрое решение, то ты тоже можешь так сделать:
1. Делаешь С диалог тоже немодальным. 2. Когда он открывается В запираешь. 3. Когда С закрывается В отпирается. 4. Когда А закрывается (если А это основное окно приложения) - закрываешь В и С.
П.4 нужен на всякий случай для чистоты.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #78 : 15-02-2010 12:25 » |
|
п 4 - тут всё понятно, оно у меняавтоматом отработает.
2 и 3 - "запирать" - как это делается ?
|
|
|
Записан
|
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #79 : 15-02-2010 12:33 » |
|
Но это как-то... неспортивно... Ну если спортивно, то нужно иметь 2 цикла обработки событий Тогда что-то в этом духе: Form a = CreateForm("A"); a.Show(); Thread bThread = new Thread(delegate() { Form b = CreateForm("B"); b.Show(); Form c = CreateForm("C"); c.ShowDialog(b); Application.Run(b); }); bThread.IsBackground = true; bThread.Start(); Application.Run(a);
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #80 : 15-02-2010 12:37 » |
|
Алексей1153++, по-моему это CWnd::EnableWindow
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #81 : 15-02-2010 12:46 » |
|
попробую
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #82 : 15-02-2010 13:29 » |
|
Ага, плюс ещё наверное все контролы на нём. Ну плюс. На SetFocus отдавать его сразу диалогу С, не позволять менять размеры, перемещать и тд. Я бы просто делал по принципу разумной достаточности. Что в В юзер может напакостить, то и запирать.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #83 : 15-02-2010 13:30 » |
|
Ну если спортивно, то нужно иметь 2 цикла обработки событий Тогда что-то в этом духе: Остаётся повторить это в MFC проекте.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Dimka
Деятель
Команда клуба
Offline
Пол:
|
|
« Ответ #84 : 15-02-2010 13:37 » |
|
Джон, а в MFC, сколь я помню, как раз есть формы, которые заводят для себя отдельные нити.
|
|
|
Записан
|
Программировать - значит понимать (К. Нюгард) Невывернутое лучше, чем вправленное (М. Аврелий) Многие готовы скорее умереть, чем подумать (Б. Рассел)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #85 : 15-02-2010 17:03 » |
|
Нити ? Потоки что ли ? Нет, модальные диалоги организуют цикл обработки очереди сообщений, поток они не создают
сейчас попробую это провернуть )
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #86 : 15-02-2010 17:34 » |
|
вроде работает. Только при не блокированном главном окне надо не давать его закрыть (я это здесь не делал) - а то программа падает из-за оставшегося блокированным окна Bvoid C_B_DIALOG::OnButton1() { struct s_EnableKeeper { CWnd* pW;
s_EnableKeeper(CWnd* pW) { this->pW=pW; pW->EnableWindow(0); }
~s_EnableKeeper() { pW->EnableWindow(1); } };
if(((CButton*)GetDlgItem(IDC_chkBlockA))->GetCheck()) { C_C_DIALOG C(this); C.DoModal(); } else { s_EnableKeeper En(this);
C_C_DIALOG C; C.Create(C.IDD,this); C.ShowWindow(SW_SHOW); while(::IsWindow(C.m_hWnd) && C.IsWindowVisible()) { LONG counter=0; MSG m; if(::GetMessage(&m,0,0,0)) { counter=0; ::TranslateMessage(&m); ::DispatchMessage(&m); } else { counter++; extern CABCmodalApp theApp; theApp.OnIdle(counter); } }
if(::IsWindow(C.m_hWnd)) { C.DestroyWindow(); } } }
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #87 : 16-02-2010 06:27 » |
|
вроде работает. Только при не блокированном главном окне надо не давать его закрыть (я это здесь не делал) - а то программа падает из-за оставшегося блокированным окна B Лёш, это то, что я в п.4 написал. При закрытии А надо дать команду закрыть В, которое в свою очередь закроет С.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #88 : 16-02-2010 06:41 » |
|
в реальной программе у меня сделано проще - если пытаются закрыть A , я вывожу сообщение, что неплохо было бы сначала покончить с C
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #89 : 16-02-2010 08:40 » |
|
А зачем? И так по цепочке? Не любишь ты юзеров.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #90 : 16-02-2010 09:08 » |
|
там нет цепочки, если одно модальное открыто, то другие не откроются. ну а фигли, закроют, забыв сохранить настройки, а потом пищать будут ? Нет уж.
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #91 : 16-02-2010 11:18 » |
|
Ну как нет? Система даёт команду закрыть все окна. А закрывает В, В закрывает С. Если С может закрыться (bWasModified = false), то оно закрывается и В тоже смотрит, может ли оно теперь закрыться и тд до А автоматически. Если пользователь не сделал изменений, то все окна "чисто" закроются. Конечно, если диалог не может быть закрыт по той или иной причине, то он должен об этом сообщить. А говорить пользователю о необходимости закрыть все открытые и находящиеся незнамо где в цепочке окна это как-то... Я бы лично такую прогу сразу удалил бы. Тем более, что чисто алгоритмически это некрасиво - откуда А знает, что есть С? Вассал моего вассала - не мой вассал.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #92 : 16-02-2010 11:38 » |
|
Джон, A знает, что есть C . Не удалят Проект старый, сильно курочить не стану - головняка бульше будет
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #93 : 16-02-2010 12:05 » |
|
Джон, A знает, что есть C . Откуда? Ты ей на ушко нашептал? Те если В в свою очередь понадобятся ещё 10 диалогов, ты их всех познакомишь с А? Не удалят Проект старый Во-во, а ты этим бессовестно пользуешься.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #94 : 16-02-2010 12:19 » |
|
Джон, ещё как нашептал Флажок взвожу, однако Во-во, а ты этим бессовестно пользуешься.
что значит пользуюсь, это никого не напрягает, сказали бы - я бы сделал
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #95 : 18-02-2010 10:57 » |
|
небольшой озарень оставляем всё без извратов, как было изначально - с модальным окном. Только в окно C дописываем BOOL C_C_DIALOG::OnInitDialog() { CDialog::OnInitDialog();
extern CABCmodalApp theApp; theApp.m_pMainWnd->EnableWindow(1); GetParent()->EnableWindow(0);
return TRUE; }
поскольку A - у меня главное окно, то к нему сразу добираюсь через theApp, чтоб не городить. а строчка GetParent()->EnableWindow(0); нужня для блокировки B (оно разблокируется предыдущей строчкой тоже)
|
|
|
Записан
|
|
|
|
|