Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.046 c
2-1133001837
IAMDANIL
2005-11-26 13:43
2005.12.11
Почему не работает проверялка?


10-1108721885
kblc
2005-02-18 13:18
2005.12.11
OLEContainer and MDIChild


2-1132915790
Quadro
2005-11-25 13:49
2005.12.11
Запуск из под Делфи


14-1132302421
_Vaitek
2005-11-18 11:27
2005.12.11
Сжатие данных "на лету"


11-1113156574
Dimaxx
2005-04-10 22:09
2005.12.11
Рисование на канве mdwXLGrid