Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters

Reply
 
Thread Tools

вычисление размеров контролов в виндоус
Old 07.01.2004, 15:55   #1
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default вычисление размеров контролов в виндоус

есть ли способ вычислить размеры контролов, исходя из текста, который предполагается в них отобразить? размер самого текста на экране вычисляется с помощью контекста устройства, совместимого с экраном. но контрол может содержать дополнительные элементы, как, например, радиокнопка. как для таких контролов узнать эти дополнительные размеры?

Old 07.01.2004, 21:59   #2
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
Default

GetDC() для контрола, a потом GetTextExtent()

Old 08.01.2004, 05:59   #3
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally Posted by Agregat
GetDC() для контрола, a потом GetTextExtent()
это-то я как раз знаю, мой вопрос о другом

Old 08.01.2004, 07:42   #4
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
Default

Если тебе известно, что на кнопках находится, то для всех доп контролов вызывай GetWindowRect() просуммируй по обоим направлениям и прибавь свободные пространства.

Old 08.01.2004, 07:55   #5
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally Posted by Agregat
Если тебе известно, что на кнопках находится, то для всех доп контролов вызывай GetWindowRect() просуммируй по обоим направлениям и прибавь свободные пространства.
по-моему, мы говорим о разных вещах. моя цель на примере радиокнопки - имея её текст, создать её с тем минимальным размером, в который поместится весь элемент - с текстом и кругляшкой-индикатором. как вычислить размер текста, знаем. а откуда взять размер индикатора?

Old 08.01.2004, 08:09   #6
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
Default

GetSystemMetrics или SystemParametersInfo?

Old 08.01.2004, 08:11   #7
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally Posted by Agregat
GetSystemMetrics или SystemParametersInfo?
смотрел, нет ничего
библиотека qt кстати так и делает, но она основывается на своем движке для рисования, а не на системных стандартных элементах. а вот через систему, я подозреваю, такой возможности нет

Old 08.01.2004, 08:36   #8
Грустно...
 
Agregat's Avatar
 
Join Date: 08 2002
Location: Там, где всегда идут дожди
Age: 42
Posts: 21,717
Rep Power: 9
Default

Возникла другая интересная идея. А что если создать временный пустой селектор и взять его GetWindowRect()?

Old 08.01.2004, 08:52   #9
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally Posted by Agregat
Возникла другая интересная идея. А что если создать временный пустой селектор и взять его GetWindowRect()?
при создании придется задать хоть какой-то прямоугольник. надежда на применение некоего минимального прямоугольника для окна того или иного типа при задание нулевого прямоугольника в create() не оправдалась

Old 08.01.2004, 09:02   #10
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
Default

100%-no est' vyzop API s ukazaniem konkretnogo elementa (naprimer, "ugolok" dlya resize-able okon).
naydu primer - skaju.

LoadOEMBitmap
Old 24.01.2004, 18:45   #11
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
Default 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);

}

Old 26.01.2004, 10:38   #12
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

Quote:
Originally Posted by Greco El
Code:
...
m_bmSizeIcon.LoadOEMBitmap(OBM_SIZE);
...
отлично, спасибо!

Old 26.01.2004, 12:11   #13
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Rep Power: 6
Default

на здоровье.

Old 02.02.2004, 15:59   #14
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

хотелось бы также узнать точное значение каждой константы. некоторые интуитивно понятны - такие, как OBM_COMBO или OBM_CLOSE. но в чем разница между OBM_CHECK и OBM_CHECKBOXES, кто такие OBM_BTNCORNERS, OBM_BTSIZE, OBM_SIZE? ну и многие остальные... мсдн жадно обо всем этом умалчивает остается загрузить самому и посмотреть, что конечно делать влом... но придется, такова судьба программера

Old 02.02.2004, 17:09   #15
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Rep Power: 5
Default

увы, это все-таки не то. так, я не могу узнать размер кнопки, вызывающей выпадение меню в combobox-e OBM_COMBO - это только изображение стрелки на кнопке
Reply




Реклама:
реклама

All times are GMT. The time now is 18:45.
Top

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.