Узнать размер формы по ее hWnd

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

Узнать размер формы по ее hWnd

Сообщение d3drm » 20.01.2005 (Чт) 11:13

Можно ли узнать высоту и ширину формы, зная ее hWnd?? Помогите API'шкой!
ХЎ

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 20.01.2005 (Чт) 11:25

getwindowrect
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Arcanoid
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 162
Зарегистрирован: 01.01.2005 (Сб) 15:44

Сообщение Arcanoid » 20.01.2005 (Чт) 15:37

Declare function GetWindowRect lib "user32.dll" (byval hWnd as long, byval lpRect as long) as long

dim Rect(3) as long

GetWindowRect(hWnd, VarPtr(Rect(0)))

width = Rect(2) - Rect(0)
height = Rect(3) - Rect(1)

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 20.01.2005 (Чт) 18:11

посмотрел, выдает не очень точные значения из-за краев и контрол бокса формы... что делать?
ХЎ

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 20.01.2005 (Чт) 18:37

d3drm писал(а):посмотрел, выдает не очень точные значения из-за краев и контрол бокса формы... что делать?
Используй вот это.
Код: Выделить всё
Public Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
Public Const SM_CXSCREEN = 0 'X Size of screen
Public Const SM_CYSCREEN = 1 'Y Size of Screen
Public Const SM_CXVSCROLL = 2 'X Size of arrow in vertical scroll bar.
Public Const SM_CYHSCROLL = 3 'Y Size of arrow in horizontal scroll bar
Public Const SM_CYCAPTION = 4 'Height of windows caption
Public Const SM_CXBORDER = 5 'Width of no-sizable borders
Public Const SM_CYBORDER = 6 'Height of non-sizable borders
Public Const SM_CXDLGFRAME = 7 'Width of dialog box borders
Public Const SM_CYDLGFRAME = 8 'Height of dialog box borders
Public Const SM_CYVTHUMB = 9 'Height of scroll box on horizontal scroll bar
Public Const SM_CXHTHUMB = 10 ' Width of scroll box on horizontal scroll bar
Public Const SM_CXICON = 11 'Width of standard icon
Public Const SM_CYICON = 12 'Height of standard icon
Public Const SM_CXCURSOR = 13 'Width of standard cursor
Public Const SM_CYCURSOR = 14 'Height of standard cursor
Public Const SM_CYMENU = 15 'Height of menu
Public Const SM_CXFULLSCREEN = 16 'Width of client area of maximized window
Public Const SM_CYFULLSCREEN = 17 'Height of client area of maximized window
Public Const SM_CYKANJIWINDOW = 18 'Height of Kanji window
Public Const SM_MOUSEPRESENT = 19 'True is a mouse is present
Public Const SM_CYVSCROLL = 20 'Height of arrow in vertical scroll bar
Public Const SM_CXHSCROLL = 21 'Width of arrow in vertical scroll bar
Public Const SM_DEBUG = 22 'True if deugging version of windows is running
Public Const SM_SWAPBUTTON = 23 'True if left and right buttons are swapped.
Public Const SM_CXMIN = 28 'Minimum width of window
Public Const SM_CYMIN = 29 'Minimum height of window
Public Const SM_CXSIZE = 30 'Width of title bar bitmaps
Public Const SM_CYSIZE = 31 'height of title bar bitmaps
Public Const SM_CXMINTRACK = 34 'Minimum tracking width of window
Public Const SM_CYMINTRACK = 35 'Minimum tracking height of window
Public Const SM_CXDOUBLECLK = 36 'double click width
Public Const SM_CYDOUBLECLK = 37 'double click height
Public Const SM_CXICONSPACING = 38 'width between desktop icons
Public Const SM_CYICONSPACING = 39 'height between desktop icons
Public Const SM_MENUDROPALIGNMENT = 40 'Zero if popup menus are aligned to the left of the memu bar item. True if it is aligned to the right.
Public Const SM_PENWINDOWS = 41 'The handle of the pen windows DLL if loaded.
Public Const SM_DBCSENABLED = 42 'True if double byte characteds are enabled
Public Const SM_CMOUSEBUTTONS = 43 'Number of mouse buttons.
Public Const SM_CMETRICS = 44 'Number of system metrics
Public Const SM_CLEANBOOT = 67 'Windows 95 boot mode. 0 = normal, 1 = safe, 2 = safe with network
Public Const SM_CXMAXIMIZED = 61 'default width of win95 maximised window
Public Const SM_CXMAXTRACK = 59 'maximum width when resizing win95 windows
Public Const SM_CXMENUCHECK = 71 'width of menu checkmark bitmap
Public Const SM_CXMENUSIZE = 54 'width of button on menu bar
Public Const SM_CXMINIMIZED = 57 'width of rectangle into which minimised windows must fit.
Public Const SM_CYMAXIMIZED = 62 'default height of win95 maximised window
Public Const SM_CYMAXTRACK = 60 'maximum width when resizing win95 windows
Public Const SM_CYMENUCHECK = 72 'height of menu checkmark bitmap
Public Const SM_CYMENUSIZE = 55 'height of button on menu bar
Public Const SM_CYMINIMIZED = 58 'height of rectangle into which minimised windows must fit.
Public Const SM_CYSMCAPTION = 51 'height of windows 95 small caption
Public Const SM_MIDEASTENABLED = 74 'Hebrw and Arabic enabled for windows 95
Public Const SM_NETWORK = 63 'bit o is set if a network is present. Const SM_SECURE = 44 'True if security is present on windows 95 system
Public Const SM_SLOWMACHINE = 73 'true if machine is too slow to run win95.

Возвращает тоже в пикселах
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 20.01.2005 (Чт) 18:56

...а чтобы не рассчитывать размеры самому, можно вызвать GetClientRect (с теми же параметрами)
Изображение

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 20.01.2005 (Чт) 19:25

Это круто! Спасибо, мужики!!!
ХЎ

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 21.01.2005 (Пт) 9:35

Ну ёлки, задача же была формы, а не клиентской области...
Эх, всё-таки прокачал ты его, и правда :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4160
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 21.01.2005 (Пт) 11:00

d3drm
Если это для Aspect в iRender, может поступить проще? Передавай в iR.InitWithDialog не hWnd, а саму форму, как объект. Тогда спокойно получишь хоть Width & Height, хоть ScaleWidth & ScaleHeight.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 24.01.2005 (Пн) 1:01

мало смысла, вернее с нужной инвормацией перейдет масса мусора. не эффективно.
ХЎ

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4160
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 24.01.2005 (Пн) 11:01

Ничего не перейдет, ведь ты передаешь не все данные формы, а ссылку на них (ByRef).


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

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

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

    TopList