CEdit只能输入16进制数

1、创建CEDit继承类CEditEx,在继承类中处理字符响应函数,在CEdit控件上创建CEditEx控件变量,即可

BEGIN_MESSAGE_MAP(CEditEx, CEdit)
  // *****切记加入映射函数***** 
  ON_WM_CHAR()
END_MESSAGE_MAP()


BEGIN_DISPATCH_MAP(CEditEx, CEdit)
END_DISPATCH_MAP()

// Note: we add support for IID_IEditEx to support typesafe binding
//  from VBA.  This IID must match the GUID that is attached to the 
//  dispinterface in the .IDL file.

// {E869C413-CCF5-42DB-B86C-7EC5617ED3E5}
static const IID IID_IEditEx =
{ 0xE869C413, 0xCCF5, 0x42DB, { 0xB8, 0x6C, 0x7E, 0xC5, 0x61, 0x7E, 0xD3, 0xE5 } };

BEGIN_INTERFACE_MAP(CEditEx, CEdit)
    INTERFACE_PART(CEditEx, IID_IEditEx, Dispatch)
END_INTERFACE_MAP()


// CEditEx message handlers


void CEditEx::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{ 
    if ( (nChar >= '0' && nChar <= '9') || 
        (nChar >= 'a' && nChar <= 'f') || 
        (nChar >= 'A' && nChar <= 'F') || 
        nChar == VK_BACK || 
        nChar == VK_DELETE) //msdn的virtual key
    { 
        nChar = (UINT)::CharUpperW(LPWSTR(nChar));                 //修改过的字母字符,转换为大写字母
        DefWindowProc(WM_CHAR, nChar, MAKELPARAM(nRepCnt, nFlags)); //用修改过的nChar调用
    } 
}
2、在控件上添加EN_CHANGE消息函数,然后对获取字符做处理
void Csigndata::OnEnChangeEnd()
{
    // TODO:  If this is a RICHEDIT control, the control will not
    // send this notification unless you override the CDialog::OnInitDialog()
    // function and call CRichEditCtrl().SetEventMask()
    // with the ENM_CHANGE flag ORed into the mask.

    // TODO:  Add your control notification handler code here
    CString strTemp=_T("");

    CEdit* editHelp = ((CEdit*)(GetDlgItem(IDC_END)));

    editHelp->GetWindowText(strTemp);

    int len = strTemp.GetLength();
    if (len > 4)
    {
        editHelp->SetWindowText(m_OldEndCode);
        return;
    }
    m_OldEndCode = strTemp;

    for (int i = 0; i < len; i ++)

    {
        char c = strTemp.GetAt(i);
        if(c < '0'||(c > '9'&& c < 'A')||c > 'F')

        {

            strTemp.Delete(i);
            m_OldEndCode.Delete(i);
            editHelp->SetWindowText(strTemp);

            editHelp->SetSel(i,i,TRUE);

            return;

        }

    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

Oracle Hints - 先知的提示

在上周恩墨微信大讲堂的讨论中,几个有趣的视图跃入我们的视野,可以分享给大家。 在Oracle 11g中,新增的视图V$SQL_HINT记录了Oracle数据库中...

2896
来自专栏乐沙弥的世界

SQL,PL/SQL 数据类型一览表

The following is a list of datatypes available in Oracle.

1103
来自专栏数据和云

案例分析:倾斜值传入导致 SQL 资源消耗升高

作者 | 邓秋爽:云和恩墨技术工程师,有超过七年超大型数据库专业服务经验,擅长 Oracle 数据库优化、SQL 优化和 Troubleshooting。

1284
来自专栏C++

Windows核心编程:第1章 错误处理

983
来自专栏乐沙弥的世界

SQL server 2005 UNPIVOT运算符的使用

      UNPIVOT运算符相对于PIVOT运算符,它执行与PIVOT相反的操作,即将列转换到行。需要注意的是UNPIVOT运算符并不完全是PIVOT的逆向...

721
来自专栏SAP最佳业务实践

SAP S/4 HANA新变化-FI数据模型

With the installation of SAP Simple Finance, on-premise edition totals and appli...

4317
来自专栏大内老A

T-SQL Enhancement in SQL Server 2005[上篇]

较之前一版本,SQL Server 2005可以说是作出了根本性的革新。对于一般的编程人员来说,最具吸引力的一大特性就是实现了对CLR的寄宿,使我们可以使用任意...

2035
来自专栏Netkiller

Spring Data 最佳实践

摘要: ORM的出现解决了程序猿学习数据库学历成本,也加快了开发的速度。程序猿无需再学习数据库定义语言DDL以及数据库客户端,也无需关注建表这些繁琐的工作,同时...

4597
来自专栏文渊之博

T-SQL基础--TOP

理解TOP子句 众所周知,TOP子句可以通过控制返回行的数量来影响查询。 我们知道TOP子句能很容易的满足返回指定行数的子集,接下来有一些例子来展示什么情况下使...

21110
来自专栏杨建荣的学习笔记

巧用rowid简化sql查询(r2笔记47天)

生产系统中有一条sql语句,目前执行的时间有点长了,而且看起来有些臃肿,客户问能不能改进一下。得到的sql语句如下: SELECT COUNT(1) FR...

2015

扫码关注云+社区

领取腾讯云代金券