Текущий архив: 2005.12.11;
Скачать: CL | DM;
ВнизНерастяжимое окно. WS_SIZEBOX vs WS_SYSMENU. Найти похожие ветки
← →
GrayFace © (2005-09-24 09:55) [0]Есть диалоговое окно. Не мое. Добавляю ему WS_SIZEBOX. После этого курсор, при наводе на рамку, меняется, но окно не растягивается. Но если убрать WS_SYSMENU, растягивание начинает работать! Поигрался с другими оконными флагами - без разницы.
WM_SIZING не обрабатывается - внедрялся, игнорировал - не помогает.
Приложение написано на C++. Не на Билдере. Из флагов можно отметить, разве что, WS_POPUP, в котором тоже нет ничего примечательного. Да и, вообще, ничего примечательного не заметно - диалог, как диалог.
Вопрос в том, как заставить его растягиваться, сохранив "крестик"?
← →
wicked © (2005-09-24 22:26) [1]WS_THICKFRAME?
← →
y-soft © (2005-09-24 23:06) [2]>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
← →
GrayFace © (2005-09-27 09:41) [3]y-soft, не помогает.
Спасибо за структуру.
← →
y-soft © (2005-09-27 10:18) [4]>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 10:22) [5]Я не менял template в памяти, просто заменил в exe-шке. Буду дома - напишу список флагов.
← →
GrayFace © (2005-10-06 14:16) [6]262 DIALOG 0, 0, 260, 210
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_DLGFRAME
← →
Игорь Шевченко © (2005-10-06 14:24) [7]Собстна, не составит труда написать такое окно, которое будет игнорировать изменения стилей и не позволять менять размер.
← →
y-soft © (2005-10-06 15:12) [8]>GrayFace © (06.10.05 14:16) [6]
А где WS_THICKFRAME ?
← →
y-soft © (2005-10-06 15:14) [9]>Игорь Шевченко © (06.10.05 14:24) [7]
Так, Игорь, здесь задача как раз обратная :)
Да и вообще - написать можно все что угодно, но зачем, если можно проще? :)
← →
Игорь Шевченко © (2005-10-06 16:12) [10]y-soft © (06.10.05 15:14) [9]
Я к тому говорю, что в чужом окне могут быть заложены какие-то ограничения уже :)
← →
y-soft © (2005-10-06 16:15) [11]>Игорь Шевченко © (06.10.05 16:12) [10]
Да, неплохо бы услышать что-то более конкретное про проблему, а не только то, что окно создается из шаблона...
Да и вообще, если сделать окно с возможностью изменять размеры, то все равно придется отлавливать по крайней мере WM_SIZE хотя бы для того, чтобы выравнивать контролы...
← →
GrayFace © (2005-10-07 16:49) [12]ОЙ... Это только средняя часть диалога. Рамка, похоже, берется из чего-то типа MessageBox"а. Так что, придется довольствоваться исчезающим на время растягивания крестиком.
Страницы: 1 вся ветка
Текущий архив: 2005.12.11;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.041 c