Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;UpDown控件buddy如何设置值而不是WM_SETTEXT_C++_Winapi_Visual Studio 2015 - Fatal编程技术网

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>

  • 我似乎只能设置上下控件的文本 使用
  • 这导致的问题是,当控件的值为10时,我将文本设置为特定的数字,如100。下次我单击上下控件的+-时,它会变为上一个数值的+-1,即10

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

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

  • 当我在上面的函数中使用WM_SETTEXT时,我不能设置负数,当我输入
    -
    时,它会自动在-和数字之间创建一条新行。我必须将文本设置为类似于“n10”的值,才能将其设置为“-10”,这对用户界面不好
  • 是的,我在上下控制按钮上启用了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;
    }
    
    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,100
    ES_number
    不允许负数,是的。对于up-down控件,需要在up-down控件中设置值,而不是buddy。对于负数,您必须阻止上下控件自行获取
    -
    并对其进行错误解析,您必须按函数名查看发生了什么。我不确定我的方法是否正确(如果它是偶然工作的)。。。它是?(开放性问题。我现在才发现我忘了在
    WM_命令上设置
    lResult
    ,稍后将进行修复。)如果编辑控件位于对话框(或消息循环调用的窗口)中,子类控件还需要处理消息并返回
    DLGC_WANTALLKEYS
    。是否要返回不够?更有可能他想设置~ES_WANTRETURN并从包含的窗口中提取返回值。@Ben:
    ES_WANTRETURN
    对单行编辑控件无效。有可能看到一些代码吗?我让本尝试了你的建议的不同组合,但似乎没有任何效果。谢谢,@Kenneth:请更新您的问题,以显示您已经尝试的代码不适用于您。