Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Определение толщины рамки окна и высоты заголовка


Автор: CyraxZ 22.2.2007, 20:00
Скажем, известен размер рисунка в пикселах, который нужно отобразить на форме. Для этого нужно создать форму с такой клиентской областью вывода (объект Graphics). При этом нужно определить толщину рамки (border) окна и высоту области заголовка (шапки) формы, поскольку размер формы указывается с их учётом...

Как определить толщину рамки (border) окна и высоту области заголовка (шапки) формы ?

Автор: mr.DUDA 23.2.2007, 10:36
Так:
Код
    Rectangle rectAll = this.RectangleToClient(this.Bounds);
    Rectangle rectClient = this.ClientRectangle;

    int высота_шапки = rectClient.Top - rectAll.Top;
    int ширина_границы_слева = rectClient.Left - rectAll.Left;
    int ширина_границы_справа = rectAll.Right - rectClient.Right;
    int высота_границы_снизу = rectAll.Bottom - rectClient.Bottom;


З.Ы, а вообще рисовать надо не на форме, а на вложенном контроле - например Panel с Dock=Fill.

Автор: Idsa 23.2.2007, 11:52
Цитата(mr.DUDA @  23.2.2007,  10:36 Найти цитируемый пост)
З.Ы, а вообще рисовать надо не на форме, а на вложенном контроле - например Panel с Dock=Fill.

А почему бы не порисовать на форме?

Автор: mr.DUDA 23.2.2007, 13:52
Можно и на форме, никто не запрещает, только при этом надо бордеры не задеть.

Автор: Idsa 23.2.2007, 13:58
Хм... А как их вообще можно умудриться задеть?

Автор: arilou 23.2.2007, 14:58
Цитата(Idsa @  23.2.2007,  13:58 Найти цитируемый пост)
Хм... А как их вообще можно умудриться задеть? 

Idsa, что такое client area и non-client area знаешь?

Автор: Idsa 23.2.2007, 15:38
Скорее нет, чем да smile

Автор: CyraxZ 3.9.2007, 09:08
Мне нужно определить не только высоту заголовка окна, но и высоту строки меню и строки состояния.
Но проблема в том, что область this.RectangleToClient (this - форма) включает в себя области, занимаемые строкой состояния и строкой меню. А их мне надо исключить...

Автор: IEZ 3.9.2007, 10:16
Цитата(CyraxZ @  3.9.2007,  09:08 Найти цитируемый пост)
Мне нужно определить не только высоту заголовка окна, но и высоту строки меню и строки состояния.

Если ты не изменяешь, при создании формы и меню, системные установки, то тебе поможет SystemInformation - класс.
SystemInformation.BorderSize - Получает ширину и высоту границы окна в пикселах.
SystemInformation.CaptionHeight - Получает высоту в пикселах стандартной области заголовка окна.
SystemInformation.MenuHeight - Получает высоту одной строки меню в пикселах.

Автор: CyraxZ 5.9.2007, 01:43
Класс...

Автор: CyraxZ 7.9.2007, 21:21
SystemInformation.BorderSize имеет значение 1 пиксел ширины и высоты. Но размер бордера - 4 пиксела. Возмём любое окошко: не одна полоска пикселов ведь, а 4 пиксела !!!

з.ы. скоро у меня крыша съедет...

Автор: IEZ 8.9.2007, 13:05
А это: 
Код

SystemInformation.Border3DSize

Автор: CyraxZ 8.9.2007, 14:35
Там точно 4 пиксела ?  Не 2, не 5, не 7 ?

Автор: CyraxZ 10.9.2007, 23:04
Цитата

SystemInformation.Border3DSize

2 пиксела - и по ширине, и по высоте !!!  Можно уже вешаться...

з.ы. всё-таки нашёл 4 пиксела - это SystemInformation.VerticalResizeBorderThickness и SystemInformation.HorizontalResizeBorderThickness. Оба по 4 пиксела...

Непонятно только, что такое BorderSize (1 пх) и Border3DSize (2 пх)...

Автор: mr.DUDA 11.9.2007, 13:18
Цитата(CyraxZ @  10.9.2007,  23:04 Найти цитируемый пост)
Непонятно только, что такое BorderSize (1 пх) и Border3DSize (2 пх)...

Например если кинуть на форму текстбокс, у него ведь есть бордюр и это тоже окно. Изменяя border style, получим разные толщины бордюра текстбокса - это оно и есть. Для некоторых окон к бордюру добавляется своя собственная часть, как в WinXP - там окна обведены синей рамкой если включены стили.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)