Up-Down控件不会在其伙伴窗口中显示其位置

时间:2013-08-01 11:04:56

标签: c++ winapi win32gui updown

我通过以下代码创建了up-down control

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()函数的返回值。它们通过返回先前的位置值as documented成功终止。

创建的上下控件看起来很正常:
the created up-down control

问题是,发送UDM_SETPOS32消息,单击向上和向下箭头并按键盘上的向上和向下键无效。我无法直接在其中输入内容来更改编辑控件(上下控件的伙伴窗口)的内容。它只是空着。

我可以使用键盘手动输入任何内容:
example text input

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

1 个答案:

答案 0 :(得分:3)

在创建时使用样式UDS_SETBUDDYINT进行上下控制。

来自MSDN documentation

  

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);