Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Скрытие диалогового окна

399
17 декабря 2009 года
KIV
432 / / 20.01.2009
Доброго времени суток! Есть диалоговое окно, которое создаётся DialogBoxParam. Можно ли как нибудь его скрыть при создании. Сейчас у меня работает очень кривой вариант: скрытие с помошью ShowWindow при первой отрисовке. Однако окно всё равно мелькает на экране. Можно ли это как нибудь сделать получше? В WM_INITDIALOG скрывать бесполезно - окно показывается уже после. Язык программирования: flat assembler. Заранее спасибо.
311
18 декабря 2009 года
plastictown
309 / / 08.01.2006
Полагаю, Вам нужно исключить из стиля окна WS_VISIBLE.
Посмотрите WM_CREATE.
7
18 декабря 2009 года
@pixo $oft
3.4K / / 20.09.2006
Может,просто следует создавать окно тогда,когда оно реально требуется?Тогда и скрывать ничего не придётся:)
399
18 декабря 2009 года
KIV
432 / / 20.01.2009
Нет. Мне нужно создавать окно до того как оно реально потребуется. WM_CREATE пробовал. На момент посылки WM_CREATE и WM_INITDIALOG окно ещё не видно (WS_VISIBLE и так не установлен. Окно становится видимым уже после.
7
18 декабря 2009 года
@pixo $oft
3.4K / / 20.09.2006
А можно узнать причину такого решения?

Могу предложить отлавливать сообщение WS_Visible,чтобы узнать,когда оно появляется
311
19 декабря 2009 года
plastictown
309 / / 08.01.2006
Если все так сложно, не проще ли создать окно ручками?
87
19 декабря 2009 года
Kogrom
2.7K / / 02.02.2008
Возможно, вместо модального диалогового окна стоит сделать немодальное. Тогда смотреть в сторону CreateDialogParam или чего-то подобного.
399
19 декабря 2009 года
KIV
432 / / 20.01.2009
Цитата:
Возможно, вместо модального диалогового окна стоит сделать немодальное. Тогда смотреть в сторону CreateDialogParam или чего-то подобного.


Завтра посмотрю. Спасибо.

Причина такого решения: уже есть большая программа на асме в которой очень многое завязанно на сообщения этому самому окну. Я хочу сворачивать его в трей при старте (значок в трее кстати тоже обрабатывается этим окном). В этом окне очень много элементов управления, поэтому создавать их вручную - не самое приятное занятие. К тому же хотелось бы, чтобы диалоговое окно можно было изменить (ну хотя бы перевести на другой язык. при этом может потребоваться подредактировать размеры элементов) без перекомпиляции программы.

14
21 декабря 2009 года
Phodopus
3.3K / / 19.06.2008
Конечно же нужно выбирать другую функцию. Вообще, на будущее, такие задачи решаются обычными окнами, а диалоги - согласно документации - используются лишь как временные объекты.
[QUOTE=MSDN]
The DialogBoxParam function uses the CreateWindowEx function to create the dialog box. DialogBoxParam then sends a WM_INITDIALOG message (and a WM_SETFONT message if the template specifies the DS_SETFONT or DS_SHELLFONT style) to the dialog box procedure. The function displays the dialog box (regardless of whether the template specifies the WS_VISIBLE style), disables the owner window, and starts its own message loop to retrieve and dispatch messages for the dialog box.
[/QUOTE]
87
21 декабря 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: Phodopus
а диалоги - согласно документации - используются лишь как временные объекты.



Есть диалоги модальные, а есть немодальные. Немодальный диалог имеет совсем другое поведение, он не делает родительское окно недоступным, он может быть постоянным спутником родительского окна.

Более того, главное окно можно сделать из немодального диалога :)

14
21 декабря 2009 года
Phodopus
3.3K / / 19.06.2008
Цитата: Kogrom
Есть диалоги модальные, а есть немодальные.
Более того, главное окно можно сделать из немодального диалога


Тык ни с чем из этого я и не спорю. :) Но все же, все же, msdn как бэ намекает нам...

Цитата:

A dialog box is a temporary window an application creates to retrieve user input. An application typically uses dialog boxes to prompt the user for additional information for menu items. A dialog box usually contains one or more controls (child windows) with which the user enters text, chooses options, or directs the action.

399
21 декабря 2009 года
KIV
432 / / 20.01.2009
Извините, а в какой библиотеке эта функция (CreateDialog)? В USER32.DLL нет.
87
21 декабря 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: KIV
Извините, а в какой библиотеке эта функция (CreateDialog)? В USER32.DLL нет.



MSDN читать:

http://msdn.microsoft.com/en-us/library/ms645434(VS.85).aspx

Предполагаю, что придется использовать CreateDialogParam.

399
22 декабря 2009 года
KIV
432 / / 20.01.2009
CreateDialogParam получилось.
 
Код:
invoke CreateDialogParam,[instance],IDD_SETTINGS,HWND_DESKTOP,SettingsDialog,NULL
@@:
        invoke MessageBox,message,0,0,0
        test eax, eax
        jz @f
        invoke TranslateMessage,message
        invoke DispatchMessage,message
        jmp @b
@@:

Ничего не происходит. Даже значок в трее не создаётся.
87
22 декабря 2009 года
Kogrom
2.7K / / 02.02.2008
Цитата: KIV
CreateDialogParam получилось.
...
Ничего не происходит. Даже значок в трее не создаётся.



Так я и не понял - получилось или не получилось.
Если не получилось, то надо учитывать, что функции обратного вызова у модального и немодального диалогов разные.

399
23 декабря 2009 года
KIV
432 / / 20.01.2009
Почти получилось. Выполняет действия. Но значок в трее создаётся только если я вызываю ShowWindow после CreateDialog. А мне как раз это и не надо.
399
23 декабря 2009 года
KIV
432 / / 20.01.2009
Все получилось. Виновата была моя сообственная ошибка. Я создавал значок как и скрывал окно при первой отрисовке (не помню зачем это сделал). Если окно не отображалось, то и значок не создавался. Всем спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог