Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Win API C++;控件编辑强制 我在用DEV-C++开发C++中的GUI。p>_C++_User Interface_Winapi_Validation_Controls - Fatal编程技术网

Win API C++;控件编辑强制 我在用DEV-C++开发C++中的GUI。p>

Win API C++;控件编辑强制 我在用DEV-C++开发C++中的GUI。p>,c++,user-interface,winapi,validation,controls,C++,User Interface,Winapi,Validation,Controls,我有这样一个编辑控件: hctrl = CreateWindowEx( 0, "EDIT", /* Nombre de la clase */ "", /* Texto del título, no tiene */ ES_LEFT | WS_CHILD | WS_VIS

我有这样一个编辑控件:

hctrl = CreateWindowEx(
                       0,
                       "EDIT",          /* Nombre de la clase */
                       "",              /* Texto del título, no tiene */
                       ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP |
                       ES_NUMBER , /* Estilo */ 
                       85, 43,          /* Posición */
                       90, 25,         /* Tamaño */
                       hwnd,            /* Ventana padre */
                       (HMENU)ID_TEXTO2, /* Identificador del control */
                       hInstance,       /* Instancia */
                       NULL);           /* Sin datos de creación de ventana */ 
SendMessage(hctrl, WM_SETFONT, (WPARAM)hfont,
MAKELPARAM(TRUE, 0));
我希望用户在这个领域介绍一个电话号码。这是必修课

我需要这个GUI的OK按钮被禁用,直到字段被正确填充。也可能您可以按下按钮,但会显示一条消息,说明您必须填写空字段

我试过这个:

switch (HIWORD(wParam)) {
    case BN_CLICKED:
        switch (LOWORD(wParam)) {
            ...
            ... 
            case ID_BOTON9:
                hctrl = GetDlgItem(hwnd,ID_TEXTO2);     
                len = GetWindowTextLength(GetDlgItem(hwnd,ID_TEXTO2));
                if (len == 0) 
                    MessageBox(hctrl, "Número no válido","Error", MB_ICONEXCLAMATION | MB_OK);
                break;
            ...
        } 
    break; 
}
但这不起作用

有人能解释一下吗


提前感谢。

创建一个验证函数,返回一个bool,指示窗口中的输入是否正确。如果返回false,则禁用OK按钮并可选地显示一个消息框,或者最好在编辑控件上触发一个气球通知,这样用户就不会被另一个
OK
所困扰,他必须按下按钮来纠正错误

然后,您可以监听来自Editbox的EN_更改通知,并使用上述函数验证输入


但首先,调试应用程序以确保BN_CLICKED事件由您正确处理。

创建一个验证函数,该函数返回一个bool,指示窗口中的输入是否正确。如果返回false,则禁用OK按钮并可选地显示一个消息框,或者最好在编辑控件上触发一个气球通知,这样用户就不会被另一个
OK
所困扰,他必须按下按钮来纠正错误

然后,您可以监听来自Editbox的EN_更改通知,并使用上述函数验证输入

但首先,调试应用程序以确保BN_CLICKED事件由您正确处理。

使用以下方法:

开关(uMsg)

使用以下命令:

开关(uMsg)


不起作用没什么可干的。它以什么方式不工作?当我按下按钮时,如果字段为空,则不会发生任何事情…我需要禁用按钮,即字段为空或启用按钮,并显示一条消息,说明您必须填写字段。您不应允许用户按下按钮,结果显示一条警告消息。“确定”按钮应被禁用。“编辑框”下应始终有一条文本消息,但数字未填充。是否尝试调试程序?若将断点放在第
行case ID\u BOTON9
上,会发生什么?不起作用,并没有什么好做的。它以什么方式不工作?当我按下按钮时,如果字段为空,则不会发生任何事情…我需要禁用按钮,即字段为空或启用按钮,并显示一条消息,说明您必须填写字段。您不应允许用户按下按钮,结果显示一条警告消息。“确定”按钮应被禁用。“编辑框”下应始终有一条文本消息,但数字未填充。是否尝试调试程序?如果您将断点放在第
行case ID\u BOTON9
上,会发生什么?
{ 

case WM_COMMAND:       

    {       
        switch (LOWORD(wParam)) 

        { 
            case YourButton:

            {   

                //Check your Number 

                //If the Number validate do what you need to do, if not, show a message and break.

                MessageBox(hwnd,"Your message","Mesage",0);

                break;

            }