Согласование UpDown с Buddy контролем, Корректная работа в UserControl - VB

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

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

В UserControl создаю элемент UpDown для элемента с дескриптором m_BuddyhWnd следующим образом:
Листинг программы
  1. dwStyle = WS_VISIBLE Or WS_CHILD
  2. dwStyle = dwStyle Or m_Alignment Or m_Orientation
  3. If m_ArrowKeysChange Then
  4. dwStyle = dwStyle Or UDS_ARROWKEYS
  5. End If
  6. If m_AutoChangeBuddyText Then
  7. dwStyle = dwStyle Or UDS_SETBUDDYINT
  8. End If
  9. If Not (m_ShowThousandsSeparator) Then
  10. dwStyle = dwStyle Or UDS_NOTHOUSANDS
  11. End If
  12. If m_Wrap Then
  13. dwStyle = dwStyle Or UDS_WRAP
  14. End If
  15. If (m_hWnd = 0) Then
  16. '// Создать элемент управления UpDown
  17. m_hWnd = CreateWindowEx(WS_EX_STATICEDGE, UPDOWN_CLASS, vbNullString, dwStyle, _
  18. 0, 0, UserControl.ScaleWidth Screen.TwipsPerPixelX, UserControl.ScaleHeight Screen.TwipsPerPixelY, _
  19. UserControl.hWnd, 0, App.hInstance, ByVal 0&)
  20. If (m_hWnd <> 0) Then
  21. ' Установить окно пользователя для управления UpDown.
  22. ' Возвращаемое значение - дескриптор предыдущего окна пользователя
  23. Call SendMessage(m_hWnd, UDM_SETBUDDY, m_BuddyhWnd, ByVal 0&)
  24. End If
Однако команда SendMessage не дает требуемого эффекта: сообщения UDS_SETBUDDYINT и UDS_NOTHOUSANDS не работают!!! В приводимых на сайтах по Visual C++ примерах говорится о синхронизации обоих элементов контроля: UpDown и, например, TextBox. Как осуществить эту синхронизацию, почему команда UDM_SETBUDDY не дает требуемого результата в UserControl?, в то время как в ClassModule работает безукаризненно??? При создании подпрограммы обратного вызова на сообщения процедуры Windows

SetWindowLong

структура

tNMH.idfrom = 0

. Почему???
Листинг программы
  1. Private Type NMHDR
  2. hwndFrom As Long
  3. idfrom As Long
  4. code As Long
  5. End Type
  6. Private Type NMUPDOWN
  7. hdr As NMHDR
  8. iPos As Long
  9. iDelta As Long
  10. End Type
  11. Public Sub WndProc(ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByRef Result As Long)
  12. Dim tNMH As NMHDR
  13. Dim tNMUD As NMUPDOWN
  14. Dim NewValue As Long
  15. '// Сообщения процесса здесь:
  16. Select Case Msg
  17. Case WM_NOTIFY
  18. CopyMemory tNMH, ByVal lParam, Len(tNMH)
  19. If (tNMH.hwndFrom = m_hWnd) And (tNMH.idfrom = m_BuddyhWnd) Then
  20. ...
  21. End if
  22. End Select
  23. End Sub
Заране спасибо за конкретные подробные ответы.

Решение задачи: «Согласование UpDown с Buddy контролем, Корректная работа в UserControl»

textual
Листинг программы
  1.     If (m_hWnd = 0) Then
  2.         m_hWndParent = GetParent(UserControl.hwnd)
  3.         '// Создать элемент управления UpDown
  4.        m_hWnd = CreateWindowEx(WS_EX_STATICEDGE, UPDOWN_CLASS, vbNullString, dwStyle, _
  5.                                 0, 0, UserControl.ScaleWidth  Screen.TwipsPerPixelX, UserControl.ScaleHeight  Screen.TwipsPerPixelY, _
  6.                                 m_hWndParent, 0, App.hInstance, ByVal 0&)
  7.         If (m_hWnd <> 0) Then
  8.             ' Установить окно пользователя для управления UpDown.
  9.            ' Возвращаемое значение - дескриптор предыдущего окна пользователя
  10.            Call SendMessage(m_hWnd, UDM_SETBUDDY, m_BuddyhWnd, ByVal 0&)
  11.         End If
  12.     End If

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


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

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

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

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

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

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