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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: MFC ShowWindow(SW_HIDE);  (Прочитано 28047 раз)
0 Пользователей и 14 Гостей смотрят эту тему.
dorador
Гость
« : 01-10-2003 09:55 » 

Сделал приложение MFC на основе диалога, вызываю
 ShowWindow(SW_HIDE);
из OnInitDialog, а окно все равно появляется :?:
Может кто что подскажет
Записан
Джон
просто
Администратор

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

« Ответ #1 : 01-10-2003 10:10 » 

SetWindowPos(&wndTop,0,0,0,0,0);
Записан

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

ru
Offline Offline

WWW
« Ответ #2 : 01-10-2003 10:13 » 

dorador, а не проще тогда присоздании окна не задавать стиль WS_VISIBLE (чекбокс Visible в редакторе ресурсов)?

Кстати сообщение WM_INITDIALOG посылается диалогу перед тем, как оно становится видимым, т.е. твой ShowWindow(SW_HIDE) бессмысленен в OnInitDialog.
Записан

Megabyte be with you!
dorador
Гость
« Ответ #3 : 01-10-2003 10:38 » 

Джон,
Цитата

SetWindowPos(&wndTop,0,0,0,0,0);

сработало, но вызвало необходимость обрабатывать дополнительные сообщения для показа окна в нормальном виде
Lex,
Цитата

dorador, а не проще тогда присоздании окна не задавать стиль WS_VISIBLE (чекбокс Visible в редакторе ресурсов)?

пробовал - все равно показывается
Цитата

Кстати сообщение WM_INITDIALOG посылается диалогу перед тем, как оно становится видимым, т.е. твой ShowWindow(SW_HIDE) бессмысленен в OnInitDialog.

а где его вызывать чтобы был смысл :?:
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #4 : 01-10-2003 10:42 » 

dorador, А что за диалог? основное окно приложения или еще чего-нить?
как ты его создаешь? Как вызываешь?
Записан

Megabyte be with you!
Джон
просто
Администратор

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

« Ответ #5 : 01-10-2003 10:50 » 

Lex,
Цитата: dorador
Сделал приложение MFC на основе диалога


Они обычно модальными делаются - там шибко не развернёшся.

dorador,
а в чём проблема?
Записан

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

ru
Offline Offline

WWW
« Ответ #6 : 01-10-2003 10:55 » 

Цитата

Они обычно модальными делаются - там шибко не развернёшся.


Это ты не прав, можно еще и немодальные их делать. И все работает.
У меня в рабочем проекте куча панелей настоечных сделаны на основе диалогов. И все прячется, показывается и т.п.

А если его делать модальным, то не вижу смысла прятать его, причем сразу.
Записан

Megabyte be with you!
Джон
просто
Администратор

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

« Ответ #7 : 01-10-2003 11:19 » 

Я настроечные тоже немодальные делаю.

Цитата: Lex
А если его делать модальным, то не вижу смысла прятать его, причем сразу.


Я раньше тоже так думал.
А вот тебе пример из моего последнего проекта. Надо показать вместо диалога - картинку, типа фона. Прога MFC-шный диалог + параметр - файл конфигурации - XML. Короче упрощённая графическая оболочка для полной версии проекта.
Есть свой язык программирования, в котором есть функция типа CreateProcess(), те есть возможность запустить прогу из проги. Когда это делается в каком-нить цикле, а картинки большие - полноцветные фотки эдак 1600 не 1200, то при загрузке сначала появляется серый фон диалога, а только потом через 1-2 секунды (зависит от компа и загруженности) появляется всё остальное. А так я его заткнул до загрузки картинки. Эстетические потребности клиента были удовлетворены. А со стилями я тоже пробовал - не прокатывает.
Записан

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

ru
Offline Offline

WWW
« Ответ #8 : 01-10-2003 11:29 » 

Джон, В твоем случае можно было грузить картинку, а потом только показывать диалог.
А вообще DoModal() принудительно показывает диалог.
Записан

Megabyte be with you!
Джон
просто
Администратор

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

« Ответ #9 : 01-10-2003 11:37 » 

а как? если 1. диалог модальный 2. на котором создаются элементы управления 3.
и инфа о картинке - имя файла получалась после инициаллизации проги, скажем так - окошко мне уже нужно было.

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

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

ru
Offline Offline

WWW
« Ответ #10 : 01-10-2003 11:50 » new

Чего-то я тебя не понимаю, ты же только что говорил, что прога это модальный диалог который только картинку показывает.

Если подробнее опишешь  задание, то могу сказать, как это деле бы я.
Записан

Megabyte be with you!
dorador
Гость
« Ответ #11 : 01-10-2003 12:07 » 

я на MFC Dialog based сделал програмку (окно модальное).
а теперь хочу иметь возможность чтобы при запуске программа могла бы себя засунуть в трей, и показывать диалог ей в этом случае не надо.
А потом по нажатию иконки в трее он бы показывался.
Если с show не пройдет придется делать как Джон посоветовал (SetWindowPos), но тогда доп работа потребуется Жаль
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #12 : 01-10-2003 12:16 » 

dorador, сделай сновное окно не модальным.
Для этого тебе надо будет немного подправить YuorApp::InitInstance()

вместо
Код:
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
    }
    else if (nResponse == IDCANCEL)
   {
    }

написать что-нить типа
Код:
    dlg.Create(CMyDlg::IDD, NULL);
    dlg.ShowWindow(SW_SHOW); // или можно сказать SW_HIDE
« Последнее редактирование: 20-11-2007 16:16 от Алексей1153++ » Записан

Megabyte be with you!
Джон
просто
Администратор

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

« Ответ #13 : 01-10-2003 12:32 » 

Lex, я не говорил, что он "только" картинку показывает. Картинка - фон. А мне окошко нужно для принятия сообщений напр. OnDeviceChange, которые могут до "показывания" прийти. Ну не создавать же в самом деле окно специально для этого.

А чем тебе мой способ не нравится?

dorador, тебе тогда мой способ не поможет  - кнопка в таскбаре остаётся.
подожди... шеф пришёл  Ага
Записан

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

ru
Offline Offline

WWW
« Ответ #14 : 01-10-2003 12:35 » 

Цитата

А чем тебе мой способ не нравится?

dorador, тебе тогда мой способ не поможет - кнопка в таскбаре остаётся.

вот этим и не нравится, а еще и то, что такое окно остается активным и жрет ресурсы процессора.
Записан

Megabyte be with you!
Джон
просто
Администратор

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

« Ответ #15 : 01-10-2003 12:49 » 

Ну активным оно и должно оставаться, тк если ты основное окно спрятал, то как показывать собираешься?

Проще говоря - сделай в wizard MFC-dialog, вставь кнопку, а в обработке ShowWindow(SW_HIDE). во как!

а почему оно ресурсы процессора жрёт?

dorador, тебе надо немодельный диалог делать для трея, тогда с ShowWindow всё в порядке. По-моему с диалогами в трее так и делается, я уже забыл. Делал такое с WTL, но сейчас не вспомню. Если не соврать там даже функция какя-то есть. Если очень надо, могу покапать
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"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."
dorador
Гость
« Ответ #16 : 02-10-2003 10:23 » 

в общем тут виноваты особенности построения модального диалога через MFC
и если делать немодальным, то все должно получиться
но я, покопавшись в инете (rsdn), нашел следующий способ:
1. убираем "птицу" с Visible в редакторе ресурсов
2. заменяем функцию DoModal на свою, причем исходный текст функции берем из dlgcore.cpp, изменяя там
Код:
	// enter modal loop
DWORD dwFlags = 0;//MLF_SHOWONIDLE;
чтобы это компилировалось, добавляем
Код:
	#include "afxpriv.h"
#define DELETE_EXCEPTION(e) do { e->Delete(); } while (0)
в результате окно не появляется ни в нормальном виде, ни в минимизированном
пока сделал так
но кто знает может потом все-таки придется на немодальное перейти
« Последнее редактирование: 20-11-2007 16:18 от Алексей1153++ » Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #17 : 02-10-2003 10:46 » 

dorador, зачем тебе имено модальное? Что ты так за эту модальность зацепился? Сделай немодальне, тем более, что это основное окно программы и живи счастливо. Для этого тебе все-то вместо dlg.DoModal() надо написать
dlg.Create() и все.
Записан

Megabyte be with you!
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #18 : 02-10-2003 11:41 » 

Сделай так.
Поставь в классе окна переменную
BOOL FirstRun;
В конструкторе сделай ее
FirstRun=true;

В OnPaint() сделай
if (FirstRun)
{
ShowWindow(SW_HIDE);
FirstRun=False;
}

Все...
Когда надо поднять окно вызовешь SW_SHOW а при желании спрятать FirstRun=true;
Invalidate();
Записан

А птичку нашу прошу не обижать!!!
dorador
Гость
« Ответ #19 : 02-10-2003 14:04 » 

Гром,
что ж ты раньше молчал Жжешь
работает как часы, правда, подмигивает (т.е. отображается на доли секунды), зато решение простое и теперь мне кажется что оно лежит на поверхности
и чего я сам не догадался :oops:
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #20 : 02-10-2003 17:01 » 

Всегда пожалуйста...
В API это еще проще - а в MFC приходится извращаться...Можешь скомбинировать этот способ с выставлением стиля SHOWMINIMIZED в форме, окно не может быть инвизибл, MFC может так считать, а может быть минимизировано, тогда моргать будет только в СТарт полосочке , а самого окна не будет видно Улыбаюсь

А где был ))) дитя водил на плавание после школы... Улыбаюсь
Записан

А птичку нашу прошу не обижать!!!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines