编辑框中只允许输入某些特定字符的解决方法

       当我们在向文本编辑框中输入字符时,有时要求只允许输入数字,有时要求只允许输入字符或者可显字符。这个我们可以通过新建一个继承于CEdit的类来实现。

MyEdit.h文件

#pragma once


// CMyEdit

class CMyEdit : public CEdit
{
 DECLARE_DYNAMIC(CMyEdit)

public:
 CMyEdit();
 virtual ~CMyEdit();

protected:
 DECLARE_MESSAGE_MAP()
 virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
public:
 afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
};

 

MyEdit.cpp文件

#include "stdafx.h"
#include "MyEdit.h"
#include "resource.h"
// CMyEdit

IMPLEMENT_DYNAMIC(CMyEdit, CEdit)

CMyEdit::CMyEdit()
{

}

CMyEdit::~CMyEdit()
{
}


BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
 ON_WM_CHAR()
END_MESSAGE_MAP()

 

// CMyEdit message handlers

 

LRESULT CMyEdit::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // TODO: Add your specialized code here and/or call the base class
 
 return CEdit::DefWindowProc(message, wParam, lParam);
}

 

void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
 // TODO: Add your message handler code here and/or call default

     UINT ch = nChar;
 
     HWND hWnd = ::GetFocus();
    int CtrlId = ::GetDlgCtrlID(hWnd);

 

    // 删除键
     if (ch == VK_BACK)
    {
        CEdit::OnChar(nChar, nRepCnt, nFlags);
    }

   //针对某个控件进行特殊处理
   else if (CtrlId == IDC_EDIT_PUBLIC_SERIAL_CS_FIX_VALUE)
   {
        // 可显字符
       if ((ch >= 32 && ch <= 126)|| (ch == VK_DELETE))
      {
           CEdit::OnChar(nChar, nRepCnt, nFlags);
      }
    }

 

   //针对某个控件进行特殊处理
   else if (CtrlId == IDC_EDIT_PUBLIC_OTHER_SISCREV_VALUE)
   {

        //数字、字母和小数点
        if (ch >= '0' && ch <= '9'
        || ch >= 'a' && ch<= 'z'
        || ch >= 'A' && ch<= 'Z'
        || ch == VK_DELETE)
       {
             CEdit::OnChar(nChar, nRepCnt, nFlags);
       }
    }

 

   // 正常处理
    else if (ch >= '0' && ch <= '9')
    {
            CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
}

 

这个新定义的类的重点在OnChar函数,在这个函数里面我们可以对输入的字符进行判断而进行处理; 有可能,各个控件要求的输入规则不同,如果针对每种规则去创建这样一个类会感觉到代码臃余,所以在上面这段代码中,我们通过判断当前ID对应的控件要求输入规则进行了分支处理。

 

下面介绍具体的使用方法:

1、在控件所在的对话框类中,添加一个

CMyEdit  m_DataEdit;变量

2、在对话框类的OnInitDialog函数中,添加如下代码:

m_DataEdit.SubclassDlgItem(IDC_EDIT_BIN_COMPARE_CAP1,this);

这样我们就将ID:IDC_EDIT_BIN_COMPARE_CAP1对应的控件关联到CMyEdit类。

 

 

   

 

你可能感兴趣的:(delete,文本编辑)