美文网首页
CEdit只能输入16进制数

CEdit只能输入16进制数

作者: 阿发贝塔伽马 | 来源:发表于2017-07-24 16:48 被阅读0次

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;

        }

    }
}

相关文章

  • CEdit只能输入16进制数

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

  • 进制函数

    /输入hex是16进制数 , 输出sum为10进制数/int hextoDec(int hex){int sum=...

  • iOS sharesdk分享qq 、

    1 10进制数转16进制数echo‘ibase=10;obase=16;801312852’|bc 网址http:...

  • x86基础实验-阶乘(堆栈传参实现)

    简介 输入一个16进制数,使用堆栈传参的方式实现阶乘的计算并以16进制输出结果 程序运行结果 n=3时栈的情况 代码

  • Python 十进制转二进制、八进制、十六进制

    # 获取用户输入十进制数 dec = int(input("输入数字:")) print("十进制数为:", de...

  • Java 入门练习(31 - 35)

    JAVA31 十进制数转二进制数 描述 控制台随机输入一个十进制数,请你将它转换为二进制数并输出 输入描述 控制台...

  • 进制转换

    2进制 , 8进制 , 10进制 , 16进制 , 介绍 及 相互转换 及 快速转换的方法 为什么要使用进制数 数...

  • 任意十进制转任意进制

    输入一个十进制数N,将它转换成R进制数输出。

  • 位运算之奇偶位的互换

    题目: 输入任意十进制数,输出二进制表示形式, 并将奇数位与邻近偶数位互换并且输出十进制和二进制数。 样例: 输入...

  • x86基础实验-32位乘法

    简介 由于8086只支持8位和16位的乘法,所以16位以上的乘法需要自己实现。该程序实现输入两个32位16进制数,...

网友评论

      本文标题:CEdit只能输入16进制数

      本文链接:https://www.haomeiwen.com/subject/rhbbkxtx.html