Элемент управления Up-Down не показывает свою позицию в окне собеседника

Я создал контроль вверх-вниз по следующему коду.

HWND hEdit, hUpDown;

hEdit = CreateWindowExW(WS_EX_CLIENTEDGE,
L"EDIT",
Content.c_str(),
ES_LEFT | WS_VISIBLE | WS_CHILD,
600,
260,
100,
25,
hWndParent,
NULL,
hInstance,
NULL);

INITCOMMONCONTROLSEX iccx;
iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);
iccx.dwICC  = ICC_UPDOWN_CLASS;
InitCommonControlsEx(&iccx);

hUpDown = CreateWindowExW(  0,
UPDOWN_CLASSW,
L"",
UDS_ARROWKEYS | UDS_ALIGNRIGHT | WS_VISIBLE | WS_CHILD,
0,
0,
0,
0,
hWndParent,
NULL,
hInstance,
NULL);

SendMessageW(hUpDown, UDM_SETBUDDY,   (WPARAM) hEdit, (LPARAM) NULL);
SendMessageW(hUpDown, UDM_SETRANGE32, (WPARAM) 0,     (LPARAM) 100);
Sleep(5000);
SendMessageW(hUpDown, UDM_SETPOS32,   (WPARAM) NULL,  (LPARAM) 20);
Sleep(5000);
SendMessageW(hUpDown, UDM_SETPOS32,   (WPARAM) NULL,  (LPARAM) 60);

Я проверил возвращаемые значения SendMessageW() функции. Они успешно завершаются, возвращая предыдущее значение позиции как задокументировано.

Созданный элемент управления вверх-вниз выглядит нормально:
созданный контроль вверх-вниз

Проблема в том, что отправка UDM_SETPOS32 сообщение, нажатие стрелок вверх и вниз и нажатие клавиш вверх и вниз на клавиатуре не имеют никакого эффекта. Я не могу изменить содержимое элемента управления редактирования (окно приятеля элемента управления вверх-вниз) без непосредственного ввода чего-либо в него. Это просто остается пустым.

Я могу набрать что-нибудь вручную с помощью клавиатуры:
пример ввода текста

Как изменить положение / значение этого элемента управления вверх-вниз, нажимая клавиши со стрелками на клавиатуре, нажимая стрелки в графическом интерфейсе и отправляя UDM_SETPOS32 в коде? Что мне не хватает в моем коде?

2

Решение

Используйте стиль UDS_SETBUDDYINT к управлению вверх-вниз при его создании.

От Документация MSDN:

UDS_SETBUDDYINT
Вызывает управление вверх-вниз, чтобы установить текст окна собеседника (используя WM_SETTEXT сообщение), когда позиция меняется. Текст состоит из позиции, отформатированной в виде десятичной или шестнадцатеричной строки.

Измените код создания элемента управления вверх-вниз, добавив UDS_SETBUDDYINT стиль:

hUpDown = CreateWindowExW(  0,
UPDOWN_CLASSW,
L"",
UDS_SETBUDDYINT | UDS_ARROWKEYS | UDS_ALIGNRIGHT | WS_VISIBLE | WS_CHILD,
0,
0,
0,
0,
hWndParent,
NULL,
hInstance,
NULL);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]