Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.223.125.219] |
|
Страницы: (4) 1 [2] 3 4 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Цитата tumanovalex @ А если в редакторе диалогов можно указать, что окно нужно развернуть на весь экран, то можно редакторе задать положение кнопок (и других контролов), чтобы они были на нужном месте при развернутом окне? С точки зрения редактора ресурсов, описание диалога лишь текстовая структура в *.rc-файле. Посмотри https://msdn.microsoft.com/ru-ru/library/wi...p/aa381002.aspx, там указаны все возможные поля структуры, а конкретно то, что ты хочешь, должно делаться заданием стиля WS_MAXIMIZE в параметре STYLE. Что касается размещения элементов управления на диалоге, то тут два варианта: либо сразу создать диалог размером с предполагаемый экран и разместить стандартными средствами конструктора все элементы, либо кодом, после инициализации выполнить перемещение, а что бы было проще, можно сгруппировать элементы по дочерним диалогам-контейнерам |
Сообщ.
#17
,
|
|
|
Спасибо за ответ. Когда был такой код:
case WM_INITDIALOG: { //ShowWindow(hwnd, SW_MAXIMIZE); return FALSE; } STYLE WS_MAXIMIZE | DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU |
Сообщ.
#18
,
|
|
|
Цитата tumanovalex @ окно мелькнуло и пропало Добавь WS_VISIBLE. |
Сообщ.
#19
,
|
|
|
STYLE WS_MAXIMIZE | DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE case WM_INITDIALOG: { ShowWindow(hwnd, WS_VISIBLE); return FALSE; } |
Сообщ.
#20
,
|
|
|
Цитата tumanovalex @ STYLE WS_MAXIMIZE | DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_VISIBLE case WM_INITDIALOG: { ShowWindow(hwnd, WS_VISIBLE); return FALSE; } Может это ?: WS_MINIMIZEBOX | WS_MAXIMIZEBOX Процесс исследований может быть таким: Запускаем некое приложение, разворачиваем окно и WinSpy-ем смотрим его стили. Их и будем пробовать использовать. --- А вообще эти опыты у меня кончились полным провалом - мне никак не удалось, используя стили окна показать его при запуске приложения полностю развёрнутым или свёрнутым. Иногда при использовании WS_MAXIMIZE приложение начинало мерзко глючить. Поэтому я устанавливаю размеры окна исключительно после запуска. Попробуй найти, в чём дело, но по моему тема тухлая. --- Однако эта тема имеет полезное продолжение. Обычно юзер стремится выбрать некие параметры удобные для него. В том числе размеры окна и его расположение на скрине. Поэтому неплохим свойством приложения можно считать установку при запуске местоположения и размеров, выбраннх юзером предыдущим запуском. По крайней мере для окошек, непрерывно отображающих чего-то. (За исключением свёрнутого положения - запускать так, это уже перебор.) |
Сообщ.
#21
,
|
|
|
нельзя! нет совместимости флажков WS_POPUP и WS_MAXIMIZE. MFC рулит!
|
Сообщ.
#22
,
|
|
|
Убрал WS_POPUP, все равно ничего не получилось. Проект прикрепил, может быть я где-то что-то перепутал?
Прикреплённый файлWin32dialog.zip (3,73 Кбайт, скачиваний: 103) |
Сообщ.
#23
,
|
|
|
tumanovalex, похоже ответ спрятан в сообщении ЫукпШ. Рекомендую перечитать его внимательно.
|
Сообщ.
#24
,
|
|
|
пропустил break в switch WM_SIZE
MFC рулит! |
Сообщ.
#25
,
|
|
|
Спасибо, получилось. Только если в rc файле указать:
STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_VISIBLE | WS_MAXIMIZE | WS_CAPTION | WS_SYSMENU | WS_MAXIMIZE | WS_VISIBLE |
Сообщ.
#26
,
|
|
|
Чтобы ответить почему, надо знать релизацию Win32 API функции CreateWindow(Ex)
ИМХО как я уже писал флажок WS_MAXIMIZE игнорится при установленом стиле WS_POPUP, хотя вроде он игнориться и при WS_OVERLAPPED вообще надо делать через ShowWindow(SW_MAXIMIZE) |
Сообщ.
#27
,
|
|
|
Цитата B.V. @ либо кодом, после инициализации выполнить перемещение, а что бы было проще, можно сгруппировать элементы по дочерним диалогам-контейнерам Подскажите, пожалуйста,как создать дочерний диалог-контейнер для контролов, например, для кнопок ОК и Отмена. |
Сообщ.
#28
,
|
|
|
Цитата tumanovalex @ Все равно окно мелькнуло и пропало. Открыл твой проект. У тебя неправильно составлена процедура диалога. Во-первых, в случае обработки сообщения следует возвращать TRUE, согласно спецификации обработчика. Во-вторых, каждый case должен заканчиваться break-ом или return-ом, иначе управление безусловно перейдет на нижестоящий case. Что у тебя и происходит: со всех вышестоящих case управление переходит на case WM_CLOSE с последующим закрытием диалога. Что касается WS_MAXIMIZE. Возможно, диалоговые функции игнорируют данный стиль. Окно, созданное таким образом hWnd = CreateWindowEx(0, WCEX.lpszClassName, NULL, WS_OVERLAPPEDWINDOW | WS_MAXIMIZE | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 512, 512, NULL, NULL, hInstance, NULL); успешно отображается развернутым. Цитата tumanovalex @ Подскажите, пожалуйста,как создать дочерний диалог-контейнер для контролов, например, для кнопок ОК и Отмена. Точно так же, как и родительский диалог. Добавь еще один диалог в ресурсы и помести на него кнопки, а в его обработчике выполняй обработку WM_COMMAND и его результат проверяй в WinMain. Ну и создание, соответственно, должно быть через CreateDialog после родительского (так же не-модального), с указанием родителя.. |
Сообщ.
#29
,
|
|
|
Я никогда не работал с диалогами, а тем более с диалогами в диалоге. Поэтому у меня возникли трудности в реализации того, что Вы, B.V. посоветовали. У меня возникли следующие вопросы:
1. Исправил оконную процедуру DlgProc. Однако если в последнем операторе return CALLBACK DlgProc вместо FALSE указать TRUE, программа зависает. Почему так происходит? 2. Как определить хендл основного диалога для указания его в CreateDialog второго диалога? 3. Попробовал размер диалога с кнопками уменьшить до размера кнопок - не получилось. Можно ли это сделать? А то размер второго диалога, гораздо больший размера кнопок, может наложиться на другие контролы основного диалога. Проект с двумя диалогами и двумя колбек функциями прикрепил. В связи с возникшими вопросами проект не доделан, прошу не судить строго. Прикреплённый файлWin32dialog.zip (3,7 Кбайт, скачиваний: 103) |
Сообщ.
#30
,
|
|
|
Цитата B.V. @ Что касается WS_MAXIMIZE. Возможно, диалоговые функции игнорируют данный стиль. Окно, созданное таким образом hWnd = CreateWindowEx(0, WCEX.lpszClassName, NULL, WS_OVERLAPPEDWINDOW | WS_MAXIMIZE | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 512, 512, NULL, NULL, hInstance, NULL); успешно отображается развернутым. Специально попробовал - не получается. Использовал исходник из Петзольда (то-же самое, что и в MSDN). Если это действительно устойчиво работает, значит есть что-то ещё. ----- Не так всё просто, как казалось, с функцией ShowWindow. Там вообше автомат состояний, его работа зависит от запускающего приложения. Возможно игнорирование 2-го параметра при первом вызове этой функции. ----- Вероятно, все эти "проблемы" - результат того, что запускающее приложение Виндус должно иметь возможность запустить приложение в любом виде. И это можно настроить в "свойствах" - правой кнопкой мыши по ярлыку на рабочем столе->свойства->окно. |