CMFCMaskedEdit 类

CMFCMaskedEdit 类支持掩码编辑控件,此控件利用掩码验证用户输入,并根据模板显示验证的结果。

语法

class CMFCMaskedEdit : public CEdit

成员

公共构造函数

名称 描述
CMFCMaskedEdit::CMFCMaskedEdit 默认构造函数。
CMFCMaskedEdit::~CMFCMaskedEdit 析构函数。

公共方法

名称 描述
CMFCMaskedEdit::DisableMask 禁止验证用户输入。
CMFCMaskedEdit::EnableGetMaskedCharsOnly 指定 GetWindowText 方法是否只检索掩码字符。
CMFCMaskedEdit::EnableMask 初始化掩码编辑控件。
CMFCMaskedEdit::EnableSelectByGroup 指定掩码编辑控件是选择特定用户输入组还是所有用户输入。
CMFCMaskedEdit::EnableSetMaskedCharsOnly 指定文本是仅针对掩码字符还是针对整个掩码进行验证。
CMFCMaskedEdit::GetThisClass 由框架用于获取指向与此类类型关联的 CRuntimeClass 对象的指针。
CMFCMaskedEdit::GetWindowText 从掩码编辑控件中检索已验证的文本。
CMFCMaskedEdit::SetValidChars 指定用户可输入的有效字符的字符串。
CMFCMaskedEdit::SetWindowText 在掩码编辑控件中显示提示。

受保护方法

名称 描述
CMFCMaskedEdit::IsMaskedChar 由框架调用来对照相应的掩码字符验证指定字符。

备注

执行以下步骤,以便在应用程序中使用 CMFCMaskedEdit 控件:

  1. CMFCMaskedEdit 对象嵌入窗口类中。

  2. 调用 CMFCMaskedEdit::EnableMask 方法来指定掩码。

  3. 调用 CMFCMaskedEdit::SetValidChars 方法以指定有效字符的列表。

  4. 调用 CMFCMaskedEdit::SetWindowText 方法以指定掩码编辑控件的默认文本。

  5. 调用 CMFCMaskedEdit::GetWindowText 方法以检索已验证的文本。

如果不调用一个或多个方法来初始化掩码、有效字符和默认文本,则掩码编辑控件的行为与标准编辑控件的行为一样。

示例

以下示例演示如何设置掩码(例如电话号码),方式是使用 EnableMask 方法为掩码编辑控件创建掩码,使用 SetValidChars 方法指定用户可输入的有效字符的字符串,使用 SetWindowText 方法在掩码编辑控件中显示提示。 本示例是新控件示例的一部分。

CMFCMaskedEdit m_wndMaskEdit1;
CMFCMaskedEdit m_wndMaskEdit2;
CMFCMaskedEdit m_wndMaskEdit3;
CMFCMaskedEdit m_wndMaskEdit4;
CMFCMaskedEdit m_wndMaskEdit5;

CString m_strValue1;
CString m_strValue2;
CString m_strValue3;
CString m_strValue4;
CString m_strValue5;
BOOL CPage4::OnInitDialog()
{
   CMFCPropertyPage::OnInitDialog();

   // Mask 1: phone number
   m_wndMaskEdit1.EnableMask(_T(" ddd  ddd dddd"), // The mask string
                             _T("(___) ___-____"), // Literal, "_" char = character entry
                             _T(' '));             // Default char
   m_wndMaskEdit1.SetValidChars(NULL);             // Valid string characters
   m_wndMaskEdit1.SetWindowText(_T("(123) 123-1212"));

   // Mask 2: State, Zip Code
   m_wndMaskEdit2.EnableMask(_T("       cc       ddddd-dddd"), // The mask string
                             _T("State: __, Zip: _____-____"), // Literal, "_" char = character entry
                             _T(' '));                         // Backspace replace char
   m_wndMaskEdit2.SetValidChars(NULL);                         // Valid string characters
   m_wndMaskEdit2.SetWindowText(_T("State: NY, Zip: 12345-6789"));
   // Mask 3: serial code
   m_wndMaskEdit3.EnableMask(_T("     AAAA AAAA AAAA AAAA"), // The mask string
                             _T("S/N: ____-____-____-____"), // Literal, "_" char = character entry
                             _T('_'));                       // Backspace replace char
   m_wndMaskEdit3.SetValidChars(NULL);                       // Valid string characters
   m_wndMaskEdit3.SetWindowText(_T("S/N: FPR5-5678-1234-8765"));

   // Mask 4: 0xFFFF
   m_wndMaskEdit4.EnableMask(_T("  AAAA"),                     // The mask string
                             _T("0x____"),                     // Literal, "_" char = character entry
                             _T('_'));                         // Backspace replace char
   m_wndMaskEdit4.SetValidChars(_T("1234567890ABCDEFabcdef")); // Valid string characters
   m_wndMaskEdit4.SetWindowText(_T("0x01AF"));

   // Mask 5: digits only
   m_wndMaskEdit5.DisableMask();                   // Don't use the mask
   m_wndMaskEdit5.SetValidChars(_T("1234567890")); // Valid string characters
   m_wndMaskEdit5.SetWindowText(_T("1234567890"));

   return TRUE; // return TRUE unless you set the focus to a control
}

void CPage4::OnButtonGet()
{
   m_wndMaskEdit1.GetWindowText(m_strValue1);
   m_wndMaskEdit2.GetWindowText(m_strValue2);
   m_wndMaskEdit3.GetWindowText(m_strValue3);
   m_wndMaskEdit4.GetWindowText(m_strValue4);
   m_wndMaskEdit5.GetWindowText(m_strValue5);
   UpdateData(FALSE);
}

继承层次结构

CObject

CCmdTarget

CWnd

CEdit

CMFCMaskedEdit

要求

标头:afxmaskededit.h

CMFCMaskedEdit::DisableMask

禁止验证用户输入。

void DisableMask();

注解

如果禁用用户输入验证,则掩码编辑控件的行为与标准编辑控件类似。

CMFCMaskedEdit::EnableGetMaskedCharsOnly

指定 GetWindowText 方法是否只检索掩码字符。

void EnableGetMaskedCharsOnly(BOOL bEnable=TRUE);

参数

bEnable
[in] 若要指定 CMFCMaskedEdit::GetWindowText 方法仅检索掩码字符,则为 TRUE;若要指定方法检索整个文本,则为 FALSE。 默认值为 TRUE。

备注

使用此方法可检索掩码字符。 然后,创建与电话号码(例如 (425) 555-0187)对应的掩码编辑控件。 如果调用 GetWindowText 方法,它会返回“4255550187”。 如果禁止检索掩码字符,GetWindowText 方法会返回编辑控件中显示的文本,例如“(425) 555-0187”。

CMFCMaskedEdit::EnableMask

初始化掩码编辑控件。

void EnableMask(
    LPCTSTR lpszMask,
    LPCTSTR lpszInputTemplate,
    TCHAR chMaskInputTemplate=_T('_'),
    LPCTSTR lpszValid=NULL);

参数

lpszMask
[in] 一个掩码字符串,指定可在用户输入中的每个位置显示的字符类型。 lpszInputTemplate 和 lpszMask 参数字符串的长度必须相同。 有关掩码字符的详细信息,请参阅“注解”部分。

lpszInputTemplate
[in] 一个掩码模板字符串,指定可在用户输入中的每个位置显示的文字字符。 使用下划线字符 (_) 作为字符占位符。 lpszInputTemplate 和 lpszMask 参数字符串的长度必须相同。

chMaskInputTemplate
[in] 框架用于替换用户输入中每个无效字符的默认字符。 此参数的默认值为下划线 (_)。

lpszValid
[in] 包含一组有效字符的字符串。 NULL 表示所有字符都有效。 此参数的默认值为 NULL。

注解

使用此方法为掩码编辑控件创建掩码。 从 CMFCMaskedEdit 类派生一个类并替代 CMFCMaskedEdit::IsMaskedChar 方法,以使用自己的代码进行自定义掩码处理。

下表列出了默认掩码字符:

掩码字符 定义
D 数字。
d 数字或空格。
+ 加号 (+)、减号 (-) 或空格。
C 字母字符。
c 字母字符或空格。
A 字母数字字符。
a 字母数字字符或空格。
* 可打印字符。

CMFCMaskedEdit::EnableSelectByGroup

指定用户可通过掩码编辑控件选择特定组输入还是所有输入。

void EnableSelectByGroup(BOOL bEnable=TRUE);

参数

bEnable
[in] 若要仅选择组,则为 TRUE;若要选择整个文本,则为 FALSE。 默认值为 TRUE。

备注

使用此函数可指定用户可通过掩码编辑控件按组进行选择还是选择整个文本。

默认情况下,启用“按组选择”。 在这种情况下,用户只能选择连续的有效字符组。

例如,可使用以下掩码编辑控件来验证电话号码:

m_wndMaskEdit.EnableMask(
    _T(" ddd  ddd dddd"),  // Mask string
    _T("(___) ___-____"),  // Template string
    _T(' '));              // Default char

m_wndMaskEdit.SetValidChars(NULL); // All characters are valid.

m_wndMaskEdit.SetWindowText(_T("(425) 555-0187")); // Prompt

如果启用了“按组选择”,则用户只能检索“425”、“555”或“0187”字符串组。 如果禁用组选择,则用户可检索电话号码的完整文本:“(425) 555-0187”。

CMFCMaskedEdit::EnableSetMaskedCharsOnly

指定文本是仅针对掩码字符还是针对整个掩码进行验证。

void EnableSetMaskedCharsOnly(BOOL bEnable=TRUE);

参数

bEnable
[in] 若要仅针对掩码字符验证用户输入,则为 TRUE;若要针对整个掩码进行验证,则为 FALSE。 默认值为 TRUE。

CMFCMaskedEdit::GetWindowText

从掩码编辑控件中检索已验证的文本。

int GetWindowText(
    LPTSTR lpszStringBuf,
    int nMaxCount) const;

void GetWindowText(CString& rstrString) const;

参数

lpszStringBuf
[out] 指向从编辑控件接收文本的缓冲区的指针。

nMaxCount
[in] 要接收的最大字符数。

rstrString
[out] 对从编辑控件接收文本的字符串对象的引用。

返回值

第一个方法重载返回复制到 lpszStringBuf 参数缓冲区的字符串的字节数;如果掩码编辑控件没有文本,则返回 0。

注解

此方法将掩码编辑控件中的文本复制到 lpszStringBuf 缓冲区或 rstrString 字符串。

此方法会重新定义 CWnd::GetWindowText

CMFCMaskedEdit::IsMaskedChar

由框架调用来对照相应的掩码字符验证指定字符。

virtual BOOL IsMaskedChar(
    TCHAR chChar,
    TCHAR chMaskChar) const;

参数

chChar
[in] 要验证的字符。

chMaskChar
[in] 掩码字符串中的相应字符。

返回值

如果 chChar 参数是 chMaskChar 参数允许的字符类型,则为 TRUE;否则为 FALSE。

备注

重写此方法可自行验证输入字符。 有关掩码字符的详细信息,请参阅 CMFCMaskedEdit::EnableMask 方法。

CMFCMaskedEdit::SetValidChars

指定用户可输入的有效字符的字符串。

void SetValidChars(LPCTSTR lpszValid=NULL);

参数

lpszValid
[in] 一个包含有效输入字符集的字符串。 NULL 表示所有字符都有效。 此参数的默认值为 NULL。

注解

使用此方法可定义有效字符的列表。 如果输入字符不在此列表中,掩码编辑控件将不接受它。

下面的代码示例仅接受十六进制数字。

//Mask: 0xFFFF
m_wndMaskEdit.EnableMask(
    _T(" AAAA"),                // The mask string.
    _T("0x____"),               // The literal template string.
    _T('_'));                   // The default character that
                                // replaces the backspace character.
// Valid string characters
m_wndMaskEdit.SetValidChars(_T("1234567890ABCDEFabcdef"));m_wndMaskEdit.SetWindowText(_T("0x01AF"));

CMFCMaskedEdit::SetWindowText

在掩码编辑控件中显示提示。

void SetWindowText(LPCTSTR lpszString);

参数

lpszString
[in] 指向将用作提示的以 null 结尾的字符串。

注解

此方法设置控件文本。

此方法会重新定义 CWnd::SetWindowText

另请参阅

层次结构图

CEdit 类