CStringEdit - 带验证和状态/警报显示的编辑框
一个 CEdit 派生类,具有字符串内容/长度检查和高亮显示状态/警报显示功能。
引言
我经常发现对话框上的用户输入编辑框需要比基本 CEdit
控件提供的功能更多的支持。我遇到过的常见问题是需要一个编辑控件,它可以以某种方式限制可以输入到框中的字符。一些限制类型包括将输入限制在特定合法的字符集内,排除非法字符集中的字符,限制文本的最大长度,以及为固定长度的字符串提供右侧用空格填充的功能,如果它们太短的话。
另一个出现的问题是,在尚未指定用户输入的情况下,需要交替地在编辑框中显示状态或提示类型的字符串。最后,当用户输入的值存在某种错误时,最好在编辑框中显示警报类型的错误消息,而不是使用字面意义上的 MessageBeep
或弹出错误对话框。
我已经实现了一个编辑控件来满足这些需求。上面的图片显示了演示应用程序顶部的 CStringEdit
控件。在正常编辑模式下,编辑框将具有白色背景。当编辑框切换到状态模式时,背景将显示为黄色。类似地,警报消息模式会导致警报文本显示在红色背景上。此控件的设计允许将编辑字符串、状态字符串和警报字符串分别加载到控件中,然后可以通过简单的成员函数调用来更改模式。小型演示应用程序提供了测试编辑控件的平台。在正常使用中,这些控件当然可以通过包含在对话框类中的代码进行编程控制。一旦熟悉了 CStringEdit
控件的各种接口例程,演示应用程序的用法就会显而易见。
在您的项目中应用
要在您的应用程序中使用此字符串编辑控件,需要四个非常简单的步骤
- 首先,将两个源文件 StringEdit.h 和 StringEdit.cpp 添加到您的项目中。
- 接下来,使用对话框设计工具将控件设计到对话框上。选择 EDIT BOX 控件并将其放置在对话框的期望位置。
- 下一步是使用 ClassWizard 为您的对话框的类定义添加一个 Control 类型的成员变量。在 ClassWizard 中,当您选择 Add Variable 命令时,会出现一个对话框,其设置应与下图所示类似。
- 最后,在关闭 ClassWizard 后,打开您的对话框类的头文件(.h 文件),并在文件中编辑两处。在顶部附近输入下图所示的行,以便编译器能够识别特殊控件。
#include "StringEdit.h"
然后,在同一头文件的 ClassWizard 填充的部分中找到成员变量声明。找到 CEdit 控件的行,并将其类型更改为 CStringEdit
,如下图所示。
从这个
// Dialog Data //{{AFX_DATA(CStringEditDemoDlg) enum { IDD = IDD_STRINGEDITDEMO_DIALOG }; CEdit m_MyInputEdit;
到这个
// Dialog Data //{{AFX_DATA(CStringEditDemoDlg) enum { IDD = IDD_STRINGEDITDEMO_DIALOG }; CStringEdit m_MyInputEdit;
使用注意事项
默认构造函数将配置 CStringEdit
控件,使其行为与 CEdit
匹配,但您可以使用新的成员函数 GetText()
和 SetText()
来加载控件。您可以在对话框类的 OnInitDialog()
处理程序中放置其他代码,以设置 CStrinEdit
类特有的其他行为。
可以在对话框设计工具中设置编辑控件的一些样式属性。您可以自由使用任何文本对齐和边框选项。但是,CStringEdit
不应使用控制到数字模式或设置输入最大长度的属性或属性。如果需要,最大长度应使用 CStringEdit
类的 MaxLen
属性。
接口
该类的接口通过使用以下成员函数提供
void SetFixedLen(BOOL bFixedLen) // set fixed length flag BOOL GetFixedLen(void) // read back the fixed length flag
固定长度模式会简单地使 GetText()
函数返回的字符串在用户输入的文本短于控件设置的 nMax 值时,在右侧用空格填充。
void SetMode(BOOL bMode) // sets edit/status mode BOOL GetMode(void) // reads back the mode flag
该控件模式主要通过模式标志控制,当标志设置为 FALSE
时为编辑模式,设置为 TRUE
值时为黄色状态显示模式。
void SetAlertActive(UINT nSeconds) // start active alert mode void SetAlertInactive(void) // End the alert mode
通过 SetAlertActivate()
函数启动警报显示模式,此时控件为红色。参数指定了控件显示警报文本的秒数。值为零表示警报显示将一直保持直到禁用。SetAlertInactive()
函数将结束当前的警报显示模式,并将控件恢复到通过先前调用 SetMode() 函数设置的模式。
void SetMaxLength(int nMax) // method to set the maximum string length int GetMaxLength(void) // method to read back //the maximum string length
MaxLength
设置用于限制可以输入到控件中的字符数。值为零表示文本可以是任意长度。
void SetLegal(LPCSTR lpszLegal) // sets the string of legal characters void GetLegal(CString& strLegal) // gets back the legal string
合法字符串是字符串中的一组字符,用于指定编辑控件的有效输入字符。如果此字符串为空,则接受任何字符作为输入(受 Illegal 字符串中指定字符的限制)。
void SetIllegal(LPCSTR lpszIllegal) // sets the string of illegal characters void GetIllegal(CString& strIllegal) // gets back the illlegal string
非法字符串指定了在编辑的字符串输入中明确不允许的字符。如果此字符串为空,则没有非法字符需要查找。
void SetStatus(LPCSTR lpszStatus) // set status string void GetStatus(CString& strStatus) // gets back the status string
这些用于加载和检索在状态模式下显示的文本字符串。
void SetAlert(LPCSTR lpszAlert) // set alert string void GetAlert(CString& strAlert) // gets back the alert string
这些用于加载和检索在警报模式下显示的文本字符串。
void SetText(LPCSTR lpszText) // plug text into control void GetText(CString& strText) // take text out of control
这些用于将编辑模式文本放入控件并从中检索。