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
Здравствуйте Clover, Вы писали:
C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку
Естественно ! Окно то еще не создано. Оно создается внутри DoModal. Сделай в OnInitDialod вызов ShowWindow(SW_HIDE) или поэкспериментируй со стилем WS_VISIBLE.
Здравствуйте Clover, Вы писали:
C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку
Можно попробовать такую последовательность: CreateWindow, ShowWindow и RunModalLoop
Здравствуйте Hollander, Вы писали:
H>Здравствуйте Clover, Вы писали:
C>>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку
H>Естественно ! Окно то еще не создано. Оно создается внутри DoModal.
это да
H>Сделай в OnInitDialod вызов ShowWindow(SW_HIDE)
это не действиет, вернее отменяется по завершении OnInitDialog
H>или поэкспериментируй со стилем WS_VISIBLE.
а это действует только на немодальные
Можно еще в конце OnInitDialog слать себе сообщение, а в его обработчике вызывать ShowWindow(SW_HIDE), но тогда окно перед исчезновением успевает мыргнуть на экране.
Здравствуйте Clover, Вы писали:
C>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку :-(
Здравствуйте Odi$$ey, Вы писали:
H>>Естественно ! Окно то еще не создано. Оно создается внутри DoModal.
O$>это да
H>>Сделай в OnInitDialod вызов ShowWindow(SW_HIDE)
только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE)
Можно SW_SHOWMINIMIZED
O$>Можно еще в конце OnInitDialog слать себе сообщение, а в его обработчике вызывать ShowWindow(SW_HIDE), но тогда окно перед исчезновением успевает мыргнуть на экране.
Да же и не появляется ни на долю секунды. А чем ты сообщение шлешь, не PostMessage ? Тогда должно моргать, иначе это тоже самое, что вызвать напрямую функцию окна.
Здравствуйте Hollander, Вы писали:
H>Здравствуйте Odi$$ey, Вы писали:
H>>>только что проверил на свежесгнерированном проекте — ShowWindow(SW_SHOWMINNOACTIVE) H>>>Можно SW_SHOWMINIMIZED
O$>>хе-хе а плашечка-то на таскбаре осталась, щелкаешь по ней и вот он твой диалог.
H>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.
Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать
H>>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.
O$>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать
O$>Здравствуйте Odi$$ey, Вы писали:
C>>>Как при загрузки программы скрыть главное окно приложения при условии,что оно диалоговое? Делаю ShowWindow перед DoModal и получаю ошибку
Здравствуйте Hollander, Вы писали:
H>>>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.
O$>>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать
H>Ну, 33 не получится, а 15-16 — вполне возможно...
Мне вот тут как раз понадобился хотя бы один. Так как насчёт Q&A?
Если нам не помогут, то мы тоже никого не пощадим.
O$>>>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать H>>Ну, 33 не получится, а 15-16 — вполне возможно...
IT>Мне вот тут как раз понадобился хотя бы один. Так как насчёт Q&A?
ShowWindow(SW_SHOWMINNOACTIVE) перед выходом из OnInitDialog действует безотказно для всех окошек-диалогов.
Если не нравится, можно сообщения поперехватывать WM_
Чтоб убрать из таскбара(Есть статья на эту тему) :
Для диалога-аппликации необходимо в парент установить невидимое окно.
Для обычного диалога убрать стиль WS_EX_APPWINDOW и WS_OVERLAPPED.
Можно добавить стиль WS_EX_TOOLWINDOW.
ShowWindow(SW_SHOWMINNOACTIVE) перед выходом из OnInitDialog действует безотказно для всех окошек-диалогов.
Чтоб убрать из таскбара(Есть статья на эту тему) :
Для диалога-аппликации необходимо в парент установить невидимое окно.
Для обычного диалога убрать стиль WS_EX_APPWINDOW и WS_OVERLAPPED — по умолчанию создаются без отображения в таск бар.
Здравствуйте IT, Вы писали:
IT>Здравствуйте Hollander, Вы писали:
H>>>>Ну что ты пристал — диалог то спрятан. А на таскбаре виден — это пару стилей изменить. Уже был такой топик. Влом писать еще раз.
O$>>>Че пристал, че пристал... Работа такая Довел бы свой способ до полного консенсуса, написали бы Q&A — "33 способа запустить модальный диалог со скрытым окном" , а то действительно, сколько-ж можно одно и тоже писать
H>>Ну, 33 не получится, а 15-16 — вполне возможно...
IT>Мне вот тут как раз понадобился хотя бы один. Так как насчёт Q&A?
Здравствуйте Hollander, Вы писали:
H>ShowWindow(SW_SHOWMINNOACTIVE) перед выходом из OnInitDialog действует безотказно для всех окошек-диалогов.
H>Чтоб убрать из таскбара(Есть статья на эту тему) : H> Для диалога-аппликации необходимо в парент установить невидимое окно. H> Для обычного диалога убрать стиль WS_EX_APPWINDOW и WS_OVERLAPPED — по умолчанию создаются без отображения в таск бар.
H> WS_EX_TOOLWINDOW не помогает для диалога
Почитал я весь thread и нахожусь в полном недоумении: сабж — это нечто вроде спортивного интереса или как? Помню, мне нужно было засунуть в трей прогу, управляющую сидюком через клаву. Диалог все-равно нужен (настройка, информация, то-се...). Побился-побился с модальником, после чего сделал через CreateDialog и message pump. Никаких проблем с кнопкой в таскбаре, морганием окна, стилями и проч. И главное! Модальность (или немодальность) его мне совершенно безразлична — я не собираюсь дисэйблить родительское окно (десктоп)