![](https://forum.armkb.com/images/enlighten/misc/cat_top_ls.gif) |
вычисление размеров контролов в виндоус |
![](https://forum.armkb.com/images/enlighten/misc/cat_top_rs.gif) |
07.01.2004, 15:55
|
#1
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
вычисление размеров контролов в виндоус
есть ли способ вычислить размеры контролов, исходя из текста, который предполагается в них отобразить? размер самого текста на экране вычисляется с помощью контекста устройства, совместимого с экраном. но контрол может содержать дополнительные элементы, как, например, радиокнопка. как для таких контролов узнать эти дополнительные размеры?
|
|
|
07.01.2004, 21:59
|
#2
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
|
GetDC() для контрола, a потом GetTextExtent()
|
|
|
08.01.2004, 05:59
|
#3
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally Posted by Agregat
GetDC() для контрола, a потом GetTextExtent()
|
это-то я как раз знаю, мой вопрос о другом
|
|
|
08.01.2004, 07:42
|
#4
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
|
Если тебе известно, что на кнопках находится, то для всех доп контролов вызывай GetWindowRect() просуммируй по обоим направлениям и прибавь свободные пространства.
|
|
|
08.01.2004, 07:55
|
#5
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally Posted by Agregat
Если тебе известно, что на кнопках находится, то для всех доп контролов вызывай GetWindowRect() просуммируй по обоим направлениям и прибавь свободные пространства.
|
по-моему, мы говорим о разных вещах. моя цель на примере радиокнопки - имея её текст, создать её с тем минимальным размером, в который поместится весь элемент - с текстом и кругляшкой-индикатором. как вычислить размер текста, знаем. а откуда взять размер индикатора?
|
|
|
08.01.2004, 08:09
|
#6
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
|
GetSystemMetrics или SystemParametersInfo?
|
|
|
08.01.2004, 08:11
|
#7
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally Posted by Agregat
GetSystemMetrics или SystemParametersInfo?
|
смотрел, нет ничего ![Frown](https://forum.armkb.com/images/smilies/frown.gif)
библиотека qt кстати так и делает, но она основывается на своем движке для рисования, а не на системных стандартных элементах. а вот через систему, я подозреваю, такой возможности нет
|
|
|
08.01.2004, 08:36
|
#8
|
Грустно...
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
|
Возникла другая интересная идея. А что если создать временный пустой селектор и взять его GetWindowRect()?
|
|
|
08.01.2004, 08:52
|
#9
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally Posted by Agregat
Возникла другая интересная идея. А что если создать временный пустой селектор и взять его GetWindowRect()?
|
при создании придется задать хоть какой-то прямоугольник. надежда на применение некоего минимального прямоугольника для окна того или иного типа при задание нулевого прямоугольника в create() не оправдалась
|
|
|
08.01.2004, 09:02
|
#10
|
Академик
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
|
100%-no est' vyzop API s ukazaniem konkretnogo elementa (naprimer, "ugolok" dlya resize-able okon).
naydu primer - skaju.
|
|
|
![](https://forum.armkb.com/images/enlighten/misc/cat_top_ls.gif) |
LoadOEMBitmap |
![](https://forum.armkb.com/images/enlighten/misc/cat_top_rs.gif) |
24.01.2004, 18:45
|
#11
|
Академик
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
|
LoadOEMBitmap
Quote:
Originally Posted by Aram Hambardzumyan
по-моему, мы говорим о разных вещах. моя цель на примере радиокнопки - имея её текст, создать её с тем минимальным размером, в который поместится весь элемент - с текстом и кругляшкой-индикатором. как вычислить размер текста, знаем. а откуда взять размер индикатора?
|
Code:
CStatic m_wndSizeIcon;
CBitmap m_bmSizeIcon;
CDlg::OnInitDialog()
{
...
m_bmSizeIcon.LoadOEMBitmap(OBM_SIZE);
m_wndSizeIcon.Create(NULL,WS_CHILD | WS_VISIBLE | SS_BITMAP,CRect(0,0,10,10),this,m_idSizeIcon);
m_wndSizeIcon.SetBitmap(m_bmSizeIcon);
...
// move the icon to the bottom-right corner:
GetClientRect(rcDialogClient);
m_wndSizeIcon.GetWindowRect(rcIcon);
ScreenToClient(rcIcon);
m_wndSizeIcon.SetWindowPos(NULL, rcDialogClient.right-rcIcon.Width(), rcDialogClient.bottom-rcIcon.Height(), 0, 0, SWP_NOZORDER | SWP_NOSIZE);
}
|
|
|
26.01.2004, 10:38
|
#12
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
Quote:
Originally Posted by Greco El
Code:
...
m_bmSizeIcon.LoadOEMBitmap(OBM_SIZE);
...
|
отлично, спасибо!
|
|
|
26.01.2004, 12:11
|
#13
|
Академик
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
|
![Wink](https://forum.armkb.com/images/smilies/wink.gif) на здоровье.
|
|
|
02.02.2004, 15:59
|
#14
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
хотелось бы также узнать точное значение каждой константы. некоторые интуитивно понятны - такие, как OBM_COMBO или OBM_CLOSE. но в чем разница между OBM_CHECK и OBM_CHECKBOXES, кто такие OBM_BTNCORNERS, OBM_BTSIZE, OBM_SIZE? ну и многие остальные... мсдн жадно обо всем этом умалчивает ![Frown](https://forum.armkb.com/images/smilies/frown.gif) остается загрузить самому и посмотреть, что конечно делать влом... но придется, такова судьба программера
|
|
|
02.02.2004, 17:09
|
#15
|
The Reloaded
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
|
увы, это все-таки не то. так, я не могу узнать размер кнопки, вызывающей выпадение меню в combobox-e ![Frown](https://forum.armkb.com/images/smilies/frown.gif) OBM_COMBO - это только изображение стрелки на кнопке
|
|
|
All times are GMT. The time now is 18:45. |
|
|