Согласование UpDown с Buddy контролем, Корректная работа в UserControl - VB
Формулировка задачи:
В UserControl создаю элемент UpDown для элемента с дескриптором m_BuddyhWnd следующим образом:
Однако команда SendMessage не дает требуемого эффекта: сообщения UDS_SETBUDDYINT и UDS_NOTHOUSANDS не работают!!!
В приводимых на сайтах по Visual C++ примерах говорится о синхронизации обоих элементов контроля: UpDown и, например, TextBox.
Как осуществить эту синхронизацию, почему команда UDM_SETBUDDY не дает требуемого результата в UserControl?, в то время как в ClassModule работает безукаризненно???
При создании подпрограммы обратного вызова на сообщения процедуры Windows
Заране спасибо за конкретные подробные ответы.
Листинг программы
- dwStyle = WS_VISIBLE Or WS_CHILD
- dwStyle = dwStyle Or m_Alignment Or m_Orientation
- If m_ArrowKeysChange Then
- dwStyle = dwStyle Or UDS_ARROWKEYS
- End If
- If m_AutoChangeBuddyText Then
- dwStyle = dwStyle Or UDS_SETBUDDYINT
- End If
- If Not (m_ShowThousandsSeparator) Then
- dwStyle = dwStyle Or UDS_NOTHOUSANDS
- End If
- If m_Wrap Then
- dwStyle = dwStyle Or UDS_WRAP
- End If
- If (m_hWnd = 0) Then
- '// Создать элемент управления UpDown
- m_hWnd = CreateWindowEx(WS_EX_STATICEDGE, UPDOWN_CLASS, vbNullString, dwStyle, _
- 0, 0, UserControl.ScaleWidth Screen.TwipsPerPixelX, UserControl.ScaleHeight Screen.TwipsPerPixelY, _
- UserControl.hWnd, 0, App.hInstance, ByVal 0&)
- If (m_hWnd <> 0) Then
- ' Установить окно пользователя для управления UpDown.
- ' Возвращаемое значение - дескриптор предыдущего окна пользователя
- Call SendMessage(m_hWnd, UDM_SETBUDDY, m_BuddyhWnd, ByVal 0&)
- End If
SetWindowLong
структураtNMH.idfrom = 0
. Почему???
Листинг программы
- Private Type NMHDR
- hwndFrom As Long
- idfrom As Long
- code As Long
- End Type
- Private Type NMUPDOWN
- hdr As NMHDR
- iPos As Long
- iDelta As Long
- End Type
- Public Sub WndProc(ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long, ByRef Result As Long)
- Dim tNMH As NMHDR
- Dim tNMUD As NMUPDOWN
- Dim NewValue As Long
- '// Сообщения процесса здесь:
- Select Case Msg
- Case WM_NOTIFY
- CopyMemory tNMH, ByVal lParam, Len(tNMH)
- If (tNMH.hwndFrom = m_hWnd) And (tNMH.idfrom = m_BuddyhWnd) Then
- ...
- End if
- End Select
- End Sub
Решение задачи: «Согласование UpDown с Buddy контролем, Корректная работа в UserControl»
textual
Листинг программы
- If (m_hWnd = 0) Then
- m_hWndParent = GetParent(UserControl.hwnd)
- '// Создать элемент управления UpDown
- m_hWnd = CreateWindowEx(WS_EX_STATICEDGE, UPDOWN_CLASS, vbNullString, dwStyle, _
- 0, 0, UserControl.ScaleWidth Screen.TwipsPerPixelX, UserControl.ScaleHeight Screen.TwipsPerPixelY, _
- m_hWndParent, 0, App.hInstance, ByVal 0&)
- If (m_hWnd <> 0) Then
- ' Установить окно пользователя для управления UpDown.
- ' Возвращаемое значение - дескриптор предыдущего окна пользователя
- Call SendMessage(m_hWnd, UDM_SETBUDDY, m_BuddyhWnd, ByVal 0&)
- End If
- End If
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д