C++上下控制伙伴如何设置值而不是WM_SETTEXT

C++ UpDown Control buddy how to set Value instead of WM_SETTEXT

本文关键字:WM SETTEXT 设置 伙伴 控制 上下 何设置 C++      更新时间:2023-10-16

我对Updown控件有几个小问题

这是使用VS2015和C++,WinApi没有MFC

  1. 我似乎只能设置Updown控件的文本 用
SendMessage(hwndUpDnEdtBdy, WM_SETTEXT, (WPARAM)1, (LPARAM)(std::to_string(number).c_str()));

这导致的问题是,当控件处于值(如 10)时,我将文本设置为特定数字(如 100)。下次我单击上下控件的 +- 时,它会更改为最后一个数值的 +-1,即 10。

如何设置上下控件的值而不是文本?

为了回答为什么我需要这样做:我有第二个控制器,跟踪栏,它与上下控制同时工作。

  1. 当我在上面的函数中使用WM_SETTEXT时,我无法设置负数,当我输入-时,它会自动在 - 和数字之间创建一个新行。我必须将文本设置为"n10"之类的内容才能将其设置为"-10",这对用户界面不利。

是的,我已经在UpDown控制伙伴上启用了ES_MULTILINE。我需要这个,这样我就可以检测到输入号码后按下了 Enter

HWND control = GetFocus();
switch (message)
{
case WM_COMMAND:
if (HIWORD(wParam) == EN_UPDATE && control == hwndUpDnEdtBdy)
{
char txt[6];
GetWindowText(hwndUpDnEdtBdy, txt, sizeof(txt));
if (CheckEnter(txt, sizeof(txt)))
{
//...Do Operation Here
}
}
}
...
bool CheckEnter(char* text, int length)
{
for (int i = 0; i < length; i++)
if (text[i] == 'r')
return true;
return false;
}

是的,我尝试使用IDOK,但它不起作用, 我的控件类也是子类化的。

如何设置上下控件的值而不是文本?

向其发送UDM_SETPOSUDM_SETPOS32消息。 该值必须在先前的UDM_SETRANGEUDM_SETRANGE32消息设置的范围内。

我已经在Updown控制伙伴上启用了ES_MULTILINE。我需要这个,这样我就可以检测到输入号码后按下了 Enter

你不需要ES_MULTILINE。 单行编辑控件可以很好地检测Enter。 只需对编辑控件进行子类化即可截获WM_CHAR消息。 它的wParam将是13('r')的输入印刷机。