C++ C++;UpDown控件buddy如何设置值而不是WM_SETTEXT
我在上下控制方面有几个小问题C++ C++;UpDown控件buddy如何设置值而不是WM_SETTEXT,c++,winapi,visual-studio-2015,C++,Winapi,Visual Studio 2015,我在上下控制方面有几个小问题 这是用VS+用C++,WiAPI不带MFC < /P> 我似乎只能设置上下控件的文本 使用 这导致的问题是,当控件的值为10时,我将文本设置为特定的数字,如100。下次我单击上下控件的+-时,它会变为上一个数值的+-1,即10 如何设置上下控件的值而不是文本 为了回答为什么我需要这样做:我有第二个控制器,trackbar,它和上下控制同时工作 当我在上面的函数中使用WM_SETTEXT时,我不能设置负数,当我输入-时,它会自动在-和数字之间创建一条新行。我必须将文本
这是用VS+用C++,WiAPI不带MFC < /P>
-
时,它会自动在-和数字之间创建一条新行。我必须将文本设置为类似于“n10”的值,才能将其设置为“-10”,这对用户界面不好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;
}
HWND control=GetFocus();
开关(信息)
{
case WM_命令:
if(HIWORD(wParam)==EN_UPDATE&control==hwndUpDnEdtBdy)
{
char-txt[6];
GetWindowText(hwndUpDnEdtBdy,txt,sizeof(txt));
如果(选中Enter(txt,sizeof(txt)))
{
//…在这里做手术
}
}
}
...
布尔检查输入(字符*文本,整数长度)
{
for(int i=0;i
是的,我试过使用IDOK,但没用,
我的控件类也是子类
如何设置上下控件的值而不是文本
给它发个短信。该值必须在Previor或消息设置的范围内
我在上下控制按钮上启用了ES_多行。我需要这个,这样我就可以检测到输入号码后按下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;
}
您不需要使用多行。单行编辑控件可以很好地检测Enter。只需对编辑控件进行子类化即可截获消息。按Enter键时,其
wParam
将为13('\r'
)。关闭ES\u多行
,并确保设置了ES\u编号
,看看这是否解决了问题。如果您知道上/下控件不适用于多行文本字段。启用ES\u multiline
是检测回车键的错误方法。确定我将ES\u multiline更改为ES\u NUMBER,并尝试了以下代码:case WM\u KEYDOWN:If(HIWORD(wParam)=VK\u RETURN&control==hwndUpDnEdtBdy)
这仍然不起作用,当我输入一个数字并按下enter键时,没有发生任何事情,而且,我似乎无法输入负数或小数,即使控制范围设置为-100,100ES_number
不允许负数,是的。对于up-down控件,需要在up-down控件中设置值,而不是buddy。对于负数,您必须阻止上下控件自行获取-
并对其进行错误解析,您必须按函数名查看发生了什么。我不确定我的方法是否正确(如果它是偶然工作的)。。。它是?(开放性问题。我现在才发现我忘了在WM_命令上设置lResult
,稍后将进行修复。)如果编辑控件位于对话框(或消息循环调用的窗口)中,子类控件还需要处理消息并返回DLGC_WANTALLKEYS
。是否要返回不够?更有可能他想设置~ES_WANTRETURN并从包含的窗口中提取返回值。@Ben:ES_WANTRETURN
对单行编辑控件无效。有可能看到一些代码吗?我让本尝试了你的建议的不同组合,但似乎没有任何效果。谢谢,@Kenneth:请更新您的问题,以显示您已经尝试的代码不适用于您。