如题
重载了一个CEdit,在OnChar里做了限制只能输入十六进制数,代码如下
void CHexEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
if ((nChar >= 0x30 && nChar <=  0x39) ||
(nChar >= 'a' && nChar <= 'f') ||
(nChar >= 'A' && nChar <= 'F') ||
(nChar == 0x08))
{
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}
这样倒是只能输入十六进制数,可Ctrl+c Ctrl+v等操作都给屏蔽了,请问有什么办法解决呢?

解决方案 »

  1.   

    先判断Ctrl键等没有按下:GetKeyboardState
      

  2.   

    搞定了,改成这样了
    void CHexEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    // 先取键盘状态看是否有ctrl 按下
    short nks;
    nks = GetKeyState(VK_CONTROL);

    if (nks & 0x8000)
    {
    CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
    else if ((nChar >= 0x30 && nChar <=  0x39) ||
    (nChar >= 'a' && nChar <= 'f') ||
    (nChar >= 'A' && nChar <= 'F') ||
    (nChar == 0x08) ||
    (nChar == 0x20))
    {
    CEdit::OnChar(nChar, nRepCnt, nFlags);
    }
    }