В чем VB меряет размеры окон?

Статус
Закрыто для дальнейших ответов.

Dенис

Участник
Топикстартер
Сообщения
126
Реакции
0
Собственно сабж. В редакторе VB у формы стоит Height=320,4. Это в чем? Как получить размеры в экранных пикселях?
 

wOxxOm

Участник
Сообщения
798
Реакции
3
Ответ: В чем VB меряет размеры окон?

Задается в пойнтах. Пиксель = пойнт * 4/3. И наоборот пойнт = пиксель * 3/4. Эта формула верна только для дефолтного экранного DPI в панели экрана равного 96 dpi. Для других значений = 72 : dpi. Но эти пересчеты не очень точны как показывает опыт.

Надежнее всего через WinAPI:
Код:
private Declare Function FindWindowW& Lib "user32" (ByVal lpClassW&, ByVal lpTitleW&)
private Declare Function GetWindowRect& Lib "user32" (ByVal hWnd&, r As wRECT)
private Declare Function GetClientRect& Lib "user32" (ByVal hWnd&, r As wRECT)
Type wRECT: L As Long: T As Long: r As Long: b As Long: End Type

....

Private Sub UserForm_Initialize()
   dim s$, Hwnd&, r as wRECT
   s = Caption
   Caption = Caption & Hex$(Timer)
   Hwnd = FindWindowW(StrPtr("ThunderDFrame"), StrPtr(Caption))
   GetWindowRect hwnd, r
   Caption = s
end sub

Для всей области окна с бордюром - GetWindowRect - дает в экранных координатах r.L - левый край, r.T - верхний, r.R - правый, r.B - нижний. Поэтому ширина окна = (r.R - r.L), а высота = (r.B - r.T)

GetClientRect дает размеры внутренней области окна без бортиков и заголовка (вроде), причем верхний левый угол считается за 0 (r.L=r.T=0), а r.R=ширина, r.B=высота
 

Dенис

Участник
Топикстартер
Сообщения
126
Реакции
0
Ответ: В чем VB меряет размеры окон?

Спасибо за ответ, с WinAPI я прерасно знаком, просто цель была другая. Я хотел воспользоваться визуальными возможностями VB для построения форм, ну чтобы прикинуть где какой контрол будет расположен, а потом, зная координаты и размеры, в другой среде повторить интерфейс. Поэтому и нужны были координаты в пикселях.
 
Статус
Закрыто для дальнейших ответов.