65.9K
CodeProject 正在变化。 阅读更多。
Home

CStringEdit - 带验证和状态/警报显示的编辑框

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.75/5 (5投票s)

2002 年 2 月 16 日

CPOL

5分钟阅读

viewsIcon

89908

downloadIcon

2365

一个 CEdit 派生类,具有字符串内容/长度检查和高亮显示状态/警报显示功能。

引言

我经常发现对话框上的用户输入编辑框需要比基本 CEdit 控件提供的功能更多的支持。我遇到过的常见问题是需要一个编辑控件,它可以以某种方式限制可以输入到框中的字符。一些限制类型包括将输入限制在特定合法的字符集内,排除非法字符集中的字符,限制文本的最大长度,以及为固定长度的字符串提供右侧用空格填充的功能,如果它们太短的话。

另一个出现的问题是,在尚未指定用户输入的情况下,需要交替地在编辑框中显示状态或提示类型的字符串。最后,当用户输入的值存在某种错误时,最好在编辑框中显示警报类型的错误消息,而不是使用字面意义上的 MessageBeep 或弹出错误对话框。

我已经实现了一个编辑控件来满足这些需求。上面的图片显示了演示应用程序顶部的 CStringEdit 控件。在正常编辑模式下,编辑框将具有白色背景。当编辑框切换到状态模式时,背景将显示为黄色。类似地,警报消息模式会导致警报文本显示在红色背景上。此控件的设计允许将编辑字符串、状态字符串和警报字符串分别加载到控件中,然后可以通过简单的成员函数调用来更改模式。小型演示应用程序提供了测试编辑控件的平台。在正常使用中,这些控件当然可以通过包含在对话框类中的代码进行编程控制。一旦熟悉了 CStringEdit 控件的各种接口例程,演示应用程序的用法就会显而易见。

在您的项目中应用

要在您的应用程序中使用此字符串编辑控件,需要四个非常简单的步骤

  • 首先,将两个源文件 StringEdit.hStringEdit.cpp 添加到您的项目中。
  • 接下来,使用对话框设计工具将控件设计到对话框上。选择 EDIT BOX 控件并将其放置在对话框的期望位置。
  • 下一步是使用 ClassWizard 为您的对话框的类定义添加一个 Control 类型的成员变量。在 ClassWizard 中,当您选择 Add Variable 命令时,会出现一个对话框,其设置应与下图所示类似。

    Sample Image

  • 最后,在关闭 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

这些用于将编辑模式文本放入控件并从中检索。

© . All rights reserved.