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