2

我通过以下代码创建了一个上下控件。

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消息,点击上下箭头和按键盘上的上下键都没有效果。如果不直接在其中输入内容,我无法更改编辑控件(上下控件的伙伴窗口)的内容。它只是空着。

我可以使用键盘手动输入任何内容:
示例文本输入

如何通过按键盘箭头键、单击 GUI 中的箭头和发送UDM_SETPOS32代码来更改此上下控件的位置/值?我的代码中缺少什么?

4

1 回答 1

3

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);
于 2013-08-01T11:10:31.820 回答