![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нерастяжимое окно. WS_SIZEBOX vs WS_SYSMENU.
GrayFace © (2005-09-24 09:55:00)Есть диалоговое окно. Не мое. Добавляю ему WS_SIZEBOX. После этого курсор, при наводе на рамку, меняется, но окно не растягивается. Но если убрать WS_SYSMENU, растягивание начинает работать! Поигрался с другими оконными флагами - без разницы.
WM_SIZING не обрабатывается - внедрялся, игнорировал - не помогает.
Приложение написано на C++. Не на Билдере. Из флагов можно отметить, разве что, WS_POPUP, в котором тоже нет ничего примечательного. Да и, вообще, ничего примечательного не заметно - диалог, как диалог.
Вопрос в том, как заставить его растягиваться, сохранив "крестик"?
GrayFace (2005-10-07 16:49:00) [1]ОЙ... Это только средняя часть диалога. Рамка, похоже, берется из чего-то типа MessageBox'а. Так что, придется довольствоваться исчезающим на время растягивания крестиком.
y-soft (2005-10-06 16:15:00) [2]>Игорь Шевченко © (06.10.05 16:12) [10]
Да, неплохо бы услышать что-то более конкретное про проблему, а не только то, что окно создается из шаблона...
Да и вообще, если сделать окно с возможностью изменять размеры, то все равно придется отлавливать по крайней мере WM_SIZE хотя бы для того, чтобы выравнивать контролы...
Игорь Шевченко (2005-10-06 16:12:00) [3]y-soft © (06.10.05 15:14) [9]
Я к тому говорю, что в чужом окне могут быть заложены какие-то ограничения уже :)
y-soft (2005-10-06 15:14:00) [4]>Игорь Шевченко © (06.10.05 14:24) [7]
Так, Игорь, здесь задача как раз обратная :)
Да и вообще - написать можно все что угодно, но зачем, если можно проще? :)
y-soft (2005-10-06 15:12:00) [5]>GrayFace © (06.10.05 14:16) [6]
А где WS_THICKFRAME ?
Игорь Шевченко (2005-10-06 14:24:00) [6]Собстна, не составит труда написать такое окно, которое будет игнорировать изменения стилей и не позволять менять размер.
GrayFace (2005-10-06 14:16:00) [7]262 DIALOG 0, 0, 260, 210
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_DLGFRAME
GrayFace (2005-09-27 10:22:00) [8]Я не менял template в памяти, просто заменил в exe-шке. Буду дома - напишу список флагов.
y-soft (2005-09-27 10:18:00) [9]>GrayFace © (27.09.05 09:41) [3]
Я такие трюки делал - срабатывает. Может быть у Вас в поле Style несовместимые флаги? ...
Кстати, ресурс может быть и в документированном формате TDlgTemplate:
type
PDlgTemplate = ^TDlgTemplate;
TDlgTemplate = packed record
style: DWORD;
dwExtendedStyle: DWORD;
cdit: Word;
x: SHORT;
y: SHORT;
cx: SHORT;
cy: SHORT;
Data: array[0..0] of word; //Items data (DWORD aligned)
end;
(проверяйте по значению поляsignature...
GrayFace (2005-09-27 09:41:00) [10]y-soft, не помогает.
Спасибо за структуру.
y-soft (2005-09-24 23:06:00) [11]>GrayFace © (24.09.05 09:55)
Диалог - в смысле тот, который создается функциейDialogBoxXXXXXX?
Не меняйте стиль окна такого диалога черезSetWindowLong, устанавливаетсе его еще до вызоваDialogBoxXXXXXXX, напрямую в шаблоне диалога, загруженного в память, тогда стильWS_SIZEBOX(илиWS_THICKFRAME, что тоже самое) будет обрабатываться функцией диалога правильно...
P.S. Шаблон диалога, загруженного в память (на него указывает результатLockResource), начининается со следующей структуры (вроде бы она не документирована):
type
PDlgTemplateEx = ^TDlgTemplateEx;
TDlgTemplateEx = packed record
dlgVer: word; //Версия структуры, всегда 1
signature: word; // Если $FFFF, то шаблон хранится в расширенном формате
HelpID: DWORD; //Контекст помощи
ExStyle: DWORD; //Расширенный стиль окна
Style: DWORD; //Стиль окна
cDlgItems: word; //Кол-во элементов диалога
x: smallint; //Координаты верхнего левого угла (в диалоговых единицах)
y: smallint;
cx: smallint; //Размеры окна в диалоговых единицах
cy: smallint;
Data: array[0..0] of word; //Далее идут записи элементов диалога, выравненные по границам DWORD
end;
Модифицируйте полеStyle
wicked (2005-09-24 22:26:00) [12]WS_THICKFRAME?