сокрытие модального окна при загрузке.
От: Clover  
Дата: 22.11.01 07:07
Оценка:
Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку
Сокрытие модального окна при загрузке
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 07:29
Оценка: 9 (3)
#Имя: FAQ.mfc.modalinvisible
C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку

Если действительно нужно скрывать модальное окно, то можно сделать так:

Добавь в свой класс диалога функцию DoModal(), перепиши в нее содержимое
CDialog::DoModal() из исходников MFC — (dlgcore.cpp), найди в этой функции
строки

// enter modal loop 
DWORD dwFlags = MLF_SHOWONIDLE;


и своем классе замени их на

// enter modal loop 
DWORD dwFlags = 0; // MLF_SHOWONIDLE;


Чтоб все компилилось нужно подключить afxpriv.h и определить макрос

#define DELETE_EXCEPTION(e) do { e->Delete(); } while (0)


Еще в свойствах ресурса этого диалога надо убрать галочку More Styles->VISIBLE
Re: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 08:16
Оценка:
Здравствуйте Clover, Вы писали:

C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку



Естественно ! Окно то еще не создано. Оно создается внутри DoModal. Сделай в OnInitDialod вызов ShowWindow(SW_HIDE) или поэкспериментируй со стилем WS_VISIBLE.
Re[2]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 08:24
Оценка:
Здравствуйте Odi$$ey, Вы писали:


O$>Можно так:

...
поскипал
...

Вы, Батенька, радикал и экстремист !
Re: сокрытие модального окна при загрузке.
От: AndreyZw  
Дата: 22.11.01 09:03
Оценка: 3 (1)
Здравствуйте Clover, Вы писали:

C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку


Можно попробовать такую последовательность: CreateWindow, ShowWindow и RunModalLoop
Re[2]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 09:24
Оценка:
Здравствуйте Hollander, Вы писали:

H>Здравствуйте Clover, Вы писали:


C>>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку



H>Естественно ! Окно то еще не создано. Оно создается внутри DoModal.


это да


H>Сделай в OnInitDialod вызов ShowWindow(SW_HIDE)


это не действиет, вернее отменяется по завершении OnInitDialog

H>или поэкспериментируй со стилем WS_VISIBLE.


а это действует только на немодальные


Можно еще в конце OnInitDialog слать себе сообщение, а в его обработчике вызывать ShowWindow(SW_HIDE), но тогда окно перед исчезновением успевает мыргнуть на экране.
Re[3]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 09:27
Оценка:
Здравствуйте Hollander, Вы писали:

H>Здравствуйте Odi$$ey, Вы писали:



O$>>Можно так:

H>...

H>поскипал
H>...

H>Вы, Батенька, радикал и экстремист !


что поделать, это единственный известный мне способ скрыть окно модального диалога при его запуске.
Кто знает другие — расскажите, мне тоже интересно.
Re: сокрытие модального окна при загрузке.
От: Nico Узбекистан  
Дата: 22.11.01 10:12
Оценка:
Здравствуйте Clover, Вы писали:

C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку :-(



Можно чуть подробнее.
Re[3]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 11:31
Оценка:
Здравствуйте Odi$$ey, Вы писали:

H>>Естественно ! Окно то еще не создано. Оно создается внутри DoModal.


O$>это да


H>>Сделай в OnInitDialod вызов ShowWindow(SW_HIDE)



только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE)
Можно SW_SHOWMINIMIZED

O$>Можно еще в конце OnInitDialog слать себе сообщение, а в его обработчике вызывать ShowWindow(SW_HIDE), но тогда окно перед исчезновением успевает мыргнуть на экране.

Да же и не появляется ни на долю секунды. А чем ты сообщение шлешь, не PostMessage ? Тогда должно моргать, иначе это тоже самое, что вызвать напрямую функцию окна.
Re[4]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 11:52
Оценка:
Здравствуйте Hollander, Вы писали:

H>Здравствуйте Odi$$ey, Вы писали:


H>>>Сделай в OnInitDialod вызов ShowWindow(SW_HIDE)



H>только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE)

H>Можно SW_SHOWMINIMIZED


хе-хе а плашечка-то на таскбаре осталась, щелкаешь по ней и вот он твой диалог.
Re[5]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 12:01
Оценка:
Здравствуйте Odi$$ey, Вы писали:


H>>только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE)

H>>Можно SW_SHOWMINIMIZED


O$>хе-хе а плашечка-то на таскбаре осталась, щелкаешь по ней и вот он твой диалог.

Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.
Re[6]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 22.11.01 12:40
Оценка:
Здравствуйте Hollander, Вы писали:

H>Здравствуйте Odi$$ey, Вы писали:


H>>>только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE)

H>>>Можно SW_SHOWMINIMIZED

O$>>хе-хе а плашечка-то на таскбаре осталась, щелкаешь по ней и вот он твой диалог.

H>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.


Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать
Re[7]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 22.11.01 12:52
Оценка:
Здравствуйте Odi$$ey, Вы писали:


H>>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.


O$>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать

Ну, 33 не получится, а 15-16 — вполне возможно...
Re[2]: сокрытие модального окна при загрузке.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 21.12.01 09:33
Оценка:
Удалено избыточное цитирование. — SchweinDeBurg

Здравствуйте Odi$$ey, Вы писали:

Небольшое дополнение до кучи — надо еще в свойствах ресурса этого диалога убрать галочку More Styles->VISIBLE
Re[3]: сокрытие модального окна при загрузке.
От: Юнусов Булат Россия  
Дата: 21.12.01 18:07
Оценка:
Здравствуйте Odi$$ey, Вы писали:

O$>Здравствуйте Odi$$ey, Вы писали:

C>>>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку


Можно еще через SetWindowRgn
см:
http://www.codeguru.com/bitmap/index.shtml
Using regions
Тоже можно, только это уже немного изврат
Re[8]: сокрытие модального окна при загрузке.
От: IT Россия linq2db.com
Дата: 12.03.02 03:54
Оценка:
Здравствуйте Hollander, Вы писали:

H>>>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.


O$>>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать

H>Ну, 33 не получится, а 15-16 — вполне возможно...


Мне вот тут как раз понадобился хотя бы один. Так как насчёт Q&A?
Если нам не помогут, то мы тоже никого не пощадим.
Re[9]: сокрытие модального окна при загрузке.
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.03.02 14:09
Оценка:
Здравствуйте IT, Вы писали:

O$>>>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать
H>>Ну, 33 не получится, а 15-16 — вполне возможно...

IT>Мне вот тут как раз понадобился хотя бы один. Так как насчёт Q&A?


ShowWindow(SW_SHOWMINNOACTIVE) перед выходом из OnInitDialog действует безотказно для всех окошек-диалогов.
Если не нравится, можно сообщения поперехватывать WM_
Чтоб убрать из таскбара(Есть статья на эту тему) :
Для диалога-аппликации необходимо в парент установить невидимое окно.
Для обычного диалога убрать стиль WS_EX_APPWINDOW и WS_OVERLAPPED.
Можно добавить стиль WS_EX_TOOLWINDOW.
Re[9]: сокрытие модального окна при загрузке. 2
От: Hollander Беларусь http://blogs.rsdn.org/ikemefula
Дата: 12.03.02 14:16
Оценка:
Здравствуйте IT, Вы писали:

Поторопился я . Вот проверено :

ShowWindow(SW_SHOWMINNOACTIVE) перед выходом из OnInitDialog действует безотказно для всех окошек-диалогов.

Чтоб убрать из таскбара(Есть статья на эту тему) :
Для диалога-аппликации необходимо в парент установить невидимое окно.
Для обычного диалога убрать стиль WS_EX_APPWINDOW и WS_OVERLAPPED — по умолчанию создаются без отображения в таск бар.

WS_EX_TOOLWINDOW не помогает для диалога
Re[9]: сокрытие модального окна при загрузке.
От: Алекс Россия http://wise-orm.com
Дата: 13.03.02 08:54
Оценка:
Исправлено форматирование текста. — SchweinDeBurg

Здравствуйте IT, Вы писали:

IT>Здравствуйте Hollander, Вы писали:


H>>>>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.


O$>>>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать

H>>Ну, 33 не получится, а 15-16 — вполне возможно...


IT>Мне вот тут как раз понадобился хотя бы один. Так как насчёт Q&A?


GLOBAL
static BOOL jjj = false;

OnInitDialog
ShowWindow(SW_SHOWMINIMIZED);
jjj = true;
PostMessage(WM_SIZE,SIZE_MINIMIZED,0);

DefWindowProc
if (message == WM_SIZE && wParam == SIZE_MINIMIZED && jjj)
   ShowWindow(SW_HIDE);

Решение конечно кривое, и в таскбаре окошко упевает моргнуть, но может сойдет?
Re[10]: сокрытие модального окна при загрузке. 2
От: Игорь Вартанов Ниоткуда  
Дата: 13.03.02 13:54
Оценка: 5 (1)
Здравствуйте Hollander, Вы писали:

H>ShowWindow(SW_SHOWMINNOACTIVE) перед выходом из OnInitDialog действует безотказно для всех окошек-диалогов.


H>Чтоб убрать из таскбара(Есть статья на эту тему) :

H> Для диалога-аппликации необходимо в парент установить невидимое окно.
H> Для обычного диалога убрать стиль WS_EX_APPWINDOW и WS_OVERLAPPED — по умолчанию создаются без отображения в таск бар.

H> WS_EX_TOOLWINDOW не помогает для диалога



Почитал я весь thread и нахожусь в полном недоумении: сабж — это нечто вроде спортивного интереса или как? Помню, мне нужно было засунуть в трей прогу, управляющую сидюком через клаву. Диалог все-равно нужен (настройка, информация, то-се...). Побился-побился с модальником, после чего сделал через CreateDialog и message pump. Никаких проблем с кнопкой в таскбаре, морганием окна, стилями и проч. И главное! Модальность (или немодальность) его мне совершенно безразлична — я не собираюсь дисэйблить родительское окно (десктоп)
---
С уважением,
Игорь
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.