MFC的CEdit字符串过滤

需求来源

对于数字类型的CEdit如果不做符过滤,会输入一些非法值异常转成数字时异常

解决方式

用PreTranslateMessage虚函数来拦截、修改或者丢弃某些消息

实例

BOOL CMyApp::PreTranslateMessage(MSG* pMsg)  
{  
    // 假设您有两个CEdit控件,其ID分别为IDC_EDIT1和IDC_EDIT2  
    if (pMsg->message == WM_CHAR)  
    {  
        CWnd* pWnd = CWnd::FromHandle(pMsg->hwnd);  
        UINT nID = pWnd ? pWnd->GetDlgCtrlID() : 0;  
  
        if (nID == IDC_EDIT1 || nID == IDC_EDIT2)  
        {  
            // 过滤掉非数字字符  
            if (!((pMsg->wParam >= '0' && pMsg->wParam <= '9') || pMsg->wParam == VK_BACK || pMsg->wParam == VK_DELETE))  
            {  
                // 如果不是数字、Backspace或Delete键,则不处理该消息  
                return TRUE;  
            }  
        }  
    }  
  
    // 对于其他情况,调用基类的PreTranslateMessage  
    return CWinApp::PreTranslateMessage(pMsg);  
}

知识点

  • CWnd::FromHandle(pMsg->hwnd) 是MFC(Microsoft Foundation Class)库中的一个调用,用于将一个窗口句柄(HWND)转换为一个对应的CWnd对象指针,允许从一个窗口句柄获取一个MFC窗口对象,从而可以利用MFC的封装特性来更简洁、更安全地操作窗口。如果CWnd::FromHandle找不到与给定句柄关联的CWnd对象,它将返回NULL。因此,在使用返回的指针之前,应该检查它是否为NULL
  • CWnd::GetDlgCtrlID() 是一个成员函数,用于获取与CWnd对象关联的对话框控件ID。每个在对话框中创建的控件都会被分配一个唯一的ID,这个ID用于区分不同的控件,并允许程序通过ID来引用或操作这些控件
  • 15
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值