Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 4 [Все]   Вниз
  Печать  
Автор Тема: Несколько вопросов по поводу Visual C++  (Прочитано 74124 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zuze
Опытный

ru
Offline 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 » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 28-02-2009 18:19 » 

zuze, по твоей просьбе, моё сугубо личное видение Улыбаюсь :

когда новые проекты начну делать - попробую 2008 студию, однако пока что писал только под VC6 . Скорость работы программ пока устраивает. Сервис паков никаких не ставил

насчёт вопроса 3 - в либе описано для линковщика, где взять функцию, вот и всё. Не заморачивайся по этому поводу )
Записан

zuze
Опытный

ru
Offline Offline
Пол: Мужской
Россия, Москва


« Ответ #2 : 28-02-2009 20:02 » 

Понял.
Большое спасибо что посмотрел!!!
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #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
Опытный

ru
Offline 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
Спокойный
Администратор

il
Offline 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
Опытный

ru
Offline 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++)

Интересно если статья посвещённая таким вещам в интернете, если есть ссылочку дайте пожалуйста интересно будет почитать и проверить на практике то что написано?


Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #9 : 01-03-2009 12:45 » 

zubr, Это не вложенные цикли Улыбаюсь А два раздельных цикла. Чтоб показать это, я специально закрыл  точкой с запятой.

Алексей1153++, Просто я всегда стараюсь использовать i в качестве переменной цикла. И сталкивался несколько раз, когда в теле одного блока мне нужно было делать несколько циклов. Простой пример. Я как-то убирал шум с черно белой картинки, Нужно было делать два прохода. Первый сверху вниз, второй снизу наверх. Причем второй проход зависил от результатов первого. Тут в один цикл это не сольёш.

Кстати были еше несколько глюков 6 студии. Но довольно мелькие. Поэтому я и не запомнил.
« Последнее редактирование: 01-03-2009 12:49 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #10 : 01-03-2009 12:52 » 

Finch, для двух циклов - определить можно перед циклами, как zuze , а ты точку с запятой не поставил - она у тебя закомментирована ) У тебя вложенный цикл
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #11 : 01-03-2009 13:18 » 

Алексей1153++, Скажем так, я привел схему. Заместо Do Something естественно будет что то более сушественное чем просто коментарий. Ну в принципе для совместимости я и делал как zuze. Хотя в 6 студии если убрать int во втором цикле, то компилятор не будет иметь ничего против.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 01-03-2009 14:07 » 

Finch, можно и во втором только убрать, но тогда будет некрасиво Улыбаюсь
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 04-09-2009 02:45 » 

вопрос такой:
в VC6 , если применять более или менее вложенные шаблоны, можно наткнуться на ахтунг, когда компилятор выдаёт кучу-кучу предупреждений о том, что для дебаггера имя идентификатора порезано до 255 символов (ну да, он там длинновато выглядит внутри). Само по себе не страшно, но компиляция очень тормозится, да и output замусорен... В студии №9 такой проблемы нет (наверное, увеличили до 65535)

1) как в №6 заставить компилятор игнорировать и не показывать предупреждения ?
2) либо - как с этим бороться (уменьшения длин имён классов не помогает)
Записан

sss
Специалист

ru
Offline 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)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 04-09-2009 03:20 » 

а не отключается. Может , я не туда вставил, конечно. Я пробовал в хедере шаблона
Записан

sss
Специалист

ru
Offline Offline

« Ответ #16 : 04-09-2009 03:31 » 

Какой номер ?
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #17 : 04-09-2009 03:34 » 

#pragma warning( disable : 4786 )
Записан

sss
Специалист

ru
Offline Offline

« Ответ #18 : 04-09-2009 03:38 » 

Вставь директиву перед всеми подключениями заголовков.
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #19 : 04-09-2009 03:45 » 

всё равно не отключается
Записан

sss
Специалист

ru
Offline 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)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #21 : 04-09-2009 03:58 » 

и там тоже ставил ( Всё равно ругаецо
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #22 : 04-09-2009 03:59 » 

кстати, вроде как есть опция /wd4786 для компилятора, так он в VC6 пишет, что опция неизвестна и игнорируется ))
Записан

sss
Специалист

ru
Offline Offline

« Ответ #23 : 04-09-2009 04:28 » 

Гм.
Цитата: MSDN
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
Специалист

ru
Offline Offline

« Ответ #24 : 04-09-2009 04:39 » 

Можно еще изменить уровень с W1 на W4
Код:
#pragma warning( 4 : 4786)
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #25 : 04-09-2009 04:46 » 

всё едино так же )
Записан

sss
Специалист

ru
Offline Offline

« Ответ #26 : 04-09-2009 05:24 » 

Покажи место в коде.
Записан

while (8==8)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #27 : 04-09-2009 05:31 » 

код большой

щас попробую абстракцию соорудить
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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;

Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #29 : 18-09-2009 08:30 » 

в студии 2008:
есть ли встроенный SDK для MySQL 5(+) ? Если есть, что и как называется и где лежит ?
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #30 : 18-09-2009 11:21 » 

Смотри библиотеки ADO, по крайней мере в ADO.NET я точно знаю, что была возможность подключения. Или зайди на сайт Sun и посмотри у них?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #31 : 18-09-2009 14:59 » 

.NET  мне вроде не надо Улыбаюсь (Боже упаси!!!) , а что за сайт Sun ?
Записан

Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #32 : 18-09-2009 15:14 » 

Sun Microsystems довольно известная фирма, в прошлом году они купили MySQL. http://www.sun.com/


PS Вот нашел http://dev.mysql.com/downloads/connector/cpp/1.0.html
« Последнее редактирование: 18-09-2009 15:28 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #33 : 18-09-2009 15:37 » 

что то нашёл вот тут
http://developers.sun.com/downloads/new.jsp

но качать буду только в понедельник, дома трафик жаль )
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #34 : 18-09-2009 15:37 » 

вау, Финч, спасибо )
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 20-09-2009 10:22 » 

Цитата: Finch
Sun Microsystems довольно известная фирма, в прошлом году они купили MySQL.
А потом Oracle купил их обоих Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #36 : 20-09-2009 10:27 » 

да мне, в принципе, по барабану, кто там кого купил Отлично Лишь бы бесплатно их трудами попользоваться Ага
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #37 : 25-12-2009 04:09 » 

сумел сконвертировать большой проект из 6 в 9 Улыбаюсь Это, оказывается, всё-таки возможно. Только косметические погрешности пришлось пол ночи править, а в остальном - всё без боли)

Поменялось (из запомнившегося):
1) ну, естественно, ругань на strcpy и подобные (где длина массива явно не указана)
2) в классах CDataBase и CRecordset - когда возвращается набор записей, для строк VARCHAR тип имеет значение DBVT_ASTRING (а в 6 было DBVT_STRING)

3) ну и мелкие придирки по приведению типов
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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 извиняюсь перед девушками за ругань
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #39 : 25-12-2009 08:27 » 

в 6-й студии, похоже, это тоже было. Думал - глюки компилятора (ну так и выходит )) ), поэтому поднатужился и конвертировал в 9-ю студию (бубен спас Улыбаюсь ). А тут на те...
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #40 : 25-12-2009 14:26 » 

Алексей1153++, сколько битное приложение и ОС?
void * p = (void *)0x44556677;
чему равно p?
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #41 : 26-12-2009 02:54 » 


Всё 32-битное.

p==0x44556677 естессно Улыбаюсь
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #42 : 26-12-2009 12:06 » 

Алексей1153++, Хммм, а так (хотя это одно и то же)?

void * p = (void *)0x44556677;
A a(0x2233, p, 0x8899aabb);

Короче очень странно (перезагрузка + ребилд ол = точно не помешают).
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #43 : 26-12-2009 15:07 » 

lapulya, у меня подозрение на другое - где-то инклуд вставляется два раза, причём где-то под разными pragma pack. (это, кстати, тот самый мутный большой проект, про который я говорил )) ) . Сейчас искать это некогда, сразу не обнаружилось. Пока обошёлся заколдовыванием всего проекта на выравниванием по 1.

Кстати, а прагма pack влияет на выравнивание только элементов класса, или ещё и на размещение параметров функции в стеке ?
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #44 : 26-12-2009 19:19 » 

По идее только в структуре и в классе, но точно не помню (я ж теоретик лет 5 - 6 как Улыбаюсь )

Кстати, если сроки горят и уже занесен серп над .... над ними... то все средства хорошо, но такую жопу надо исправлять в первый же свободный момент (все что не понятно и должно работать, но не работает и все что работает, но непонятно почему, должно быть переписано ИМХО)

Смени название класса (можно для верности сменить название файла, в котором он объявлен)
« Последнее редактирование: 26-12-2009 19:25 от lapulya » Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #45 : 27-12-2009 03:01 » 

конечно, на досуге поищу косяк
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #46 : 27-12-2009 04:08 » 

Нашёл место возможного источника глюка:

незакрытая прагма с единичкой
(завтра на работе убедюсь, но вроде это оно)

Код:
#pragma pack(push, 1)
//структуры
...
...

//тут пропущен pragma pack(pop) !!!

//а тут как раз инклуд, где галиматья и возникает
#include "xxxx.h"

...
...
Записан

lapulya
Молодой специалист

ru
Offline Offline

« Ответ #47 : 27-12-2009 22:28 » 

Ппц во люди пишут... поди потом разберись...
Записан

С уважением Lapulya
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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++ » Записан

Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #50 : 12-02-2010 15:33 » 

Джон, щас, сделать нужно. А тебе в какой студии ? Улыбаюсь Ну я, собственно, сделаю в 6, потом портирую в девятку
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #51 : 12-02-2010 16:11 » 

1) блин, так приятно всё в шестой версии сделано, я уж и забыл Улыбаюсь Всё быстро, удобно, всё под рукой, вай вай....  Только подсказки не всегда выползают )))

2) кое-что обнаружил, исследую Улыбаюсь
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #52 : 12-02-2010 17:20 » 

результаты вскрытия:

1) студия №6: если создавать немодальный диалог в конструкторе родительского окна (указав this), то модальный диалог C не блокирует окно A . Если же создавать в OnInitialUpdate (или OnInitDialog) , то всё блокируется как надо

2) студия №9: разницы от места создания диалога нету

* ABCmodal.rar (76.57 Кб - загружено 875 раз.)
Записан

Джон
просто
Администратор

de
Offline 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."
Джон
просто
Администратор

de
Offline 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."
Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #56 : 12-02-2010 18:36 » 

В 2005 студии заперто всё. А В С.

не спорю, хотя я там не пробовал Улыбаюсь Вопрос в том, как повторить этот глюк в 2008-й (или в 2005) студии ? Я даже стили и EX стили окошек распечатал - они одинаковые в обоих случаях
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #57 : 12-02-2010 19:27 » 

Ну сделай так, чтобы A не был родителем B, раз тебе надо, чтобы A не блокировался.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #58 : 12-02-2010 19:33 » 

хм, попробую ) Я 0 подставлял - результат не менялся, но 0 - это, наверное, эквивалентно главному окну приложения
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #59 : 12-02-2010 19:50 » 

неа, дохлый номер Улыбаюсь Оно и понятно: если родителем сделать некое левое окно X, то у него тоже указывается родитель. А это блокирует главное окно всё равно при открытии модального окна
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #60 : 13-02-2010 13:16 » 

Не понял. Вроде окна блокируются по цепочке от модального через родители до основного, Дети заблокированных родителей тоже блокируются?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #61 : 13-02-2010 13:51 » 

Нет, не блокируются

но A - это главное окно. Что-то сильно курочит программу не хочется. Но я сейчас (как и вчера вечером) уже устал от активного дня и туплю, наверное Улыбаюсь
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #62 : 13-02-2010 14:20 » 

Поскольку в .NET Windows.Forms - тоже лишь обёртка над WinAPI, то написал тест:

Код: (Text) C#.NET
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.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #64 : 13-02-2010 15:15 » 

Ну это прибабахи MFC. Иди своим путём Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #65 : 13-02-2010 15:27 » 

m_B_init.SetParent(0);
 - не спасает тоже  )))
Записан

Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #67 : 14-02-2010 19:51 » 

хорошо )
Записан

Джон
просто
Администратор

de
Offline 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
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #69 : 15-02-2010 08:49 » 

Джон, тем не менее, работает это окно как модальный диалог, т.е. родители этого окна оказываются недоступными для пользовательских действий.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #70 : 15-02-2010 09:38 » 

Джон, я согласен, что дело именно в MFC - ведь в 6 студии работает так, а в 9 - иначе. А винда то не поменялась
Записан

Джон
просто
Администратор

de
Offline 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."
Джон
просто
Администратор

de
Offline 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();
        }
    }
}

А и В недоступны после запуска С. Ага

* Test1.exe (11 Кб - загружено 705 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #73 : 15-02-2010 11:20 » 

Но, зная Лёшку, с его: "А я так хочу!",

вообще-то, мне как раз красивее, как в 9-ке. Это клиент привык, это ЕМУ так нужно Улыбаюсь
« Последнее редактирование: 15-02-2010 11:22 от Алексей1153++ » Записан

Dimka
Деятель
Команда клуба

ru
Offline 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 » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #75 : 15-02-2010 12:08 » 

Да, я просто повторил вызовы как в лёшкином примере.

Даже если я вызываю немодальное окно явно с нулём:

Код:
        private void _showModelessDlgToolStripButton_Click(object sender, EventArgs e)
        {
            FormB dlg = new FormB();
            dlg.Show(null);
        }

Форма А всё-равно недоступна.


* Test1.rar (20.08 Кб - загружено 687 раз.)
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #76 : 15-02-2010 12:11 » 

Можно по такой схеме сделать:
Код:
            a.Show();
            b.Show(a);
            b.Enabled = false;
            c.Show(b);
Но следует учитывать, что вызов Show несинхронный, т.е. программа не будет ждать закрытия окна.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #78 : 15-02-2010 12:25 » 

п 4 - тут всё понятно, оно у меняавтоматом отработает.

2 и 3 - "запирать" - как это делается ?
Записан

Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #79 : 15-02-2010 12:33 » 

Цитата: Джон
Но это как-то...  неспортивно...
Ну если спортивно, то нужно иметь 2 цикла обработки событий Улыбаюсь Тогда что-то в этом духе:
Код: (Text)
            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
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #80 : 15-02-2010 12:37 » 

Алексей1153++, по-моему это CWnd::EnableWindow
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #81 : 15-02-2010 12:46 » 

попробую
Записан

Джон
просто
Администратор

de
Offline 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."
Джон
просто
Администратор

de
Offline 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
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #84 : 15-02-2010 13:37 » 

Джон, а в MFC, сколь я помню, как раз есть формы, которые заводят для себя отдельные нити.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #85 : 15-02-2010 17:03 » 

Нити ? Потоки что ли ? Нет, модальные диалоги организуют цикл обработки очереди сообщений, поток они не создают

сейчас попробую это провернуть )
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #86 : 15-02-2010 17:34 » 

вроде работает. Только при не блокированном главном окне надо не давать его закрыть (я это здесь не делал) - а то программа падает из-за оставшегося блокированным окна B

Код:
void 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();
}
}
}

* ABCmodal_vs9.rar (45.38 Кб - загружено 646 раз.)
Записан

Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #88 : 16-02-2010 06:41 » 

в реальной программе у меня сделано проще - если пытаются закрыть A , я вывожу сообщение, что неплохо было бы сначала покончить с C Улыбаюсь
Записан

Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #90 : 16-02-2010 09:08 » 

там нет цепочки, если одно модальное открыто, то другие не откроются.

ну а фигли, закроют, забыв сохранить настройки, а потом пищать будут ? Улыбаюсь Нет уж.
Записан

Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #92 : 16-02-2010 11:38 » 

Джон,  A знает, что есть C . Не удалят Улыбаюсь  Проект старый, сильно курочить не стану - головняка бульше будет
Записан

Джон
просто
Администратор

de
Offline 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."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #94 : 16-02-2010 12:19 » 

Джон, ещё как нашептал Улыбаюсь Флажок взвожу, однако Улыбаюсь

Цитата
Во-во, а ты этим бессовестно пользуешься.
что значит пользуюсь, это никого не напрягает, сказали бы - я бы сделал Улыбаюсь
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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  (оно разблокируется предыдущей строчкой тоже)
Записан

Страниц: 1 2 3 4 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines