Перевод twips в pixels - VB

Узнай цену своей работы

Формулировка задачи:

Привет! Отрисовываю дочернее окно (textbox) с установкой ширины и высоты по размеру формы. Но текстбокс получается немного шире и выше, чем форма. Скажите, пожалуйста, где я ошибся в расчетах?
Листинг программы
  1. Option Explicit
  2. Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
  3. Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Long, ByVal hdc As Long) As Long
  4. Private Declare Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As Long, ByVal nIndex As Long) As Long
  5. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  6. Private Declare Function CreateWindowEx Lib "user32.dll" Alias "CreateWindowExW" ( _
  7. ByVal dwExStyle As Long, _
  8. ByVal lpClassName As Long, _
  9. ByVal lpWindowName As Long, _
  10. ByVal dwStyle As Long, _
  11. ByVal x As Long, _
  12. ByVal y As Long, _
  13. ByVal nWidth As Long, _
  14. ByVal nHeight As Long, _
  15. ByVal hWndParent As Long, _
  16. ByVal hMenu As Long, _
  17. ByVal hInstance As Long, _
  18. lpParam As Any) As Long
  19. Private Const WS_EX_CLIENTEDGE As Long = &H200&
  20. Private Const WS_CHILD As Long = &H40000000
  21. Private Const WS_VISIBLE As Long = &H10000000
  22. Private Const ES_MULTILINE As Long = 4&
  23. Private Const ES_AUTOVSCROLL As Long = &H40&
  24. Private Const ES_NOHIDESEL As Long = &H100&
  25. Private Const ES_WANTRETURN As Long = &H1000&
  26. Dim hWndEdit As Long
  27.  
  28. Private Sub Form_Load()
  29. Dim yPos As Long
  30. Dim xPos As Long
  31. Dim DefaultText As String
  32. xPos = 0
  33. yPos = 0
  34. DefaultText = "Вставьте список " & ChrW(9733) & vbCrLf & "2 строка."
  35. hWndEdit = CreateWindowEx(WS_EX_CLIENTEDGE, StrPtr("EDIT"), StrPtr(DefaultText), _
  36. WS_CHILD Or WS_VISIBLE Or ES_MULTILINE Or ES_AUTOVSCROLL Or ES_NOHIDESEL Or ES_WANTRETURN, _
  37. xPos, yPos, TwipsToPixels(Me.Width, isXScale:=True), _
  38. TwipsToPixels(Me.Height, isXScale:=False), Me.hwnd, 0&, 0&, ByVal 0&)
  39. End Sub
  40. Private Function TwipsToPixels(lngTwips As Long, isXScale As Boolean) As Long
  41. Const nTwipsPerInch As Long = 1440&
  42. Const WU_LOGPIXELSX As Long = 88&
  43. Const WU_LOGPIXELSY As Long = 90&
  44. Dim lngDC As Long
  45. lngDC = GetDC(0&)
  46. TwipsToPixels = (lngTwips / nTwipsPerInch) * CLng(GetDeviceCaps(lngDC, IIf(isXScale, WU_LOGPIXELSX, WU_LOGPIXELSY)))
  47. lngDC = ReleaseDC(0&, lngDC)
  48. End Function
  49. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  50. CloseHandle hWndEdit
  51. End Sub

Решение задачи: «Перевод twips в pixels»

textual
Листинг программы
  1. Private Function TwipsToPixels(lngTwips As Long, isXScale As Boolean) As Long
  2.     TwipsToPixels = lngTwips / IIf(isXScale, Screen.TwipsPerPixelX, Screen.TwipsPerPixelY)))
  3. End Function

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут