【问题标题】:Win API C++ Control Edit compulsoryWin API C++ 控件 强制编辑
【发布时间】:2010-11-12 23:28:51
【问题描述】:

我正在使用 dev-c++ 在 C++ 中开发 GUI。

我有一个这样的编辑控件:

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

但这不起作用。

有人能解释一下吗?

提前致谢。

【问题讨论】:

  • 不起作用的情况不多。它在什么方面不起作用?
  • 当我按下按钮时,如果该字段为空,则不会发生任何事情......
  • 我需要禁用该按钮是该字段为空还是启用并显示一条消息说您必须填写该字段。
  • 您不应该允许用户按下按钮并显示警告消息。确定按钮应该被禁用。编辑框下应该一直是一条短信,而数字未填写。
  • 你试过调试你的程序吗?如果将断点放在case ID_BOTON9 行会发生什么?

标签: c++ user-interface winapi validation controls


【解决方案1】:

使用这个:

开关(微信)

{ 

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;

            }

【讨论】:

    【解决方案2】:

    创建一个验证函数,该函数返回一个布尔值,指示窗口中的输入是否正确。如果它返回 false,请禁用 OK 按钮并选择显示消息框,或者最好在编辑控件上触发气球通知,这样用户就不会被另一个 OK 惹恼,他必须推动以纠正她的错误。

    然后你可以监听来自 Editbox 的 EN_CHANGE 通知,并使用上述函数验证输入。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-18
      • 2020-08-23
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2013-08-17
      • 1970-01-01
      相关资源
      最近更新 更多