А как узнать высоту заголовка окна в Windows XP??

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

А как узнать высоту заголовка окна в Windows XP??

Сообщение Особист » 01.09.2006 (Пт) 18:27

Собственно, сабж.
Поскольку в моей программе размеры контролов масштабируются, а в WinXP есть совершенно дурацкая на мой взгляд "фишка" - в новом дизайне высота заголовков выше, чем стандарт. Всё естественно сползает вниз - не намного, но всё равно вызывает ощущение непродуманности разрабатываемой программы.

Поиском пользовался, и на форуме нашёл такую тему
GetSystemMetrics(SM_CYBORDER)+GetSystemMetrics(SM_CYCAPTION)

Но она почему-то не решает проблему, а всегда возвращает 2048.

Подскажите, как быть!

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 01.09.2006 (Пт) 19:09

Во-первых, если форма Sizable, то это SM_CYFRAME. Если Fixed Dialog/Fixed Single, тогда SM_CYDLGFRAME.

Вот простой пример. Создаешь обычную форму, вставляешь следующий код:

Код: Выделить всё
Option Explicit

Private Const SM_CYCAPTION As Long = 4
Private Const SM_CYFRAME As Long = 33
Private Const SM_CXFRAME As Long = 32
Private Declare Function GetSystemMetrics Lib "user32.dll" (ByVal nIndex As Long) As Long

Private WithEvents cmdNew As CommandButton

Private Sub Form_Load()
    Set cmdNew = Controls.Add("VB.CommandButton", "cmdNew")
    cmdNew.Visible = True
    cmdNew.Width = 3000
    cmdNew.Caption = "Hi!"
   
    Caption = "Button Demo"
    Height = cmdNew.Height + (GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYFRAME) * 2) * Screen.TwipsPerPixelY
    Width = cmdNew.Width + GetSystemMetrics(SM_CYFRAME) * 2 * Screen.TwipsPerPixelX
End Sub

Private Sub cmdNew_Click()
    MsgBox cmdNew.Caption, , "Button Event"
End Sub
Моду создают модоки, а распространяют модозвоны.

Особист
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 122
Зарегистрирован: 10.05.2006 (Ср) 12:46

Сообщение Особист » 01.09.2006 (Пт) 20:43

hCORe
Спасибо тебе большое, помогло! :D


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 67

    TopList