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;

        }

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,313评论 30 472
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,260评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,347评论 19 139
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 5,684评论 0 4
  • 以前,家乡有小小紧连的房屋 现在,家乡有大大隔离的楼房 以前,家乡有淳朴的农民 现在,家乡有不断攀比的人 以前,家...
    江潇然阅读 1,319评论 0 2