在PreTranslateMessage()里判断可以吗?

解决方案 »

  1.   

    我也不会!不过想了个办法,很土吧?关注。
    为Edit控件添加EN_CHANGE消息处理函数,将下面代码放在该处理函数里。
    该方法主要根据单字节有形字符编码是0x20-0x7e,GB18030标准中双字节有形字符编码第一字节为0x81-0xfe这一事实,遍历sz,如果碰到>0x7e,就delete该字节和其后的字节         
             //取得指向该Edit控件的指针,IDC_EDITSGL为该控件的资源ID
    CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDITSGL);
    CString sz="";
    pEdit->GetWindowText(sz);
    unsigned char c1;
    BOOL bFlag=TRUE;
    // while循环用来delete去sz中的双字节字符
    while (bFlag)
    {
    bFlag=FALSE;
    for ( int i=0;i<sz.GetLength();i++ )
    {
    c1 = sz.GetAt(i);
    if ( c1 > 0x7e )
    {
    sz.Delete(i);
    if ( i < sz.GetLength() )
    sz.Delete(i);
    bFlag = TRUE;
    break;
    }
    }
    }
    // sz现在只有单字节有形字符
    pEdit->SetWindowText(sz);
    int nLen=sz.GetLength();
    // 将光标移到Edit控件的最后
    pEdit->SetSel(nLen,nLen);