调用EDITBOX的成员函数LimitText 限制字符串
比如 CEdit* lpEdit = (CEdit*)GetDlgItem( IDC_EDIT1 );
lpEdit->LimitText( 20 );然后输入 20个英文的CHAR,正常,但是也可以输入中文的宽字符20个.....中文英文混输入也一样 ,一个中文算一个,一个英文算一个,就是说不管字符宽一个或两个都算一个有什么办法可以让它限制为 20 个BYTE,同时中文只能输入十个? 又有LimiteText 这样的效果? SetLimitText()试过了 同样的效果

解决方案 »

  1.   

    在OnChar里控制
    用WideCharToMultiByte获得以ansi计算的字节长,然后决定是否允许输入
      

  2.   

    再问一下, 有没有简单一点的方法? 新创建一个示例工程在下面新建了一个EDITBOX,再调用这个函数是 正确的 :
    也就是说在新创建的默认的工程中限制20个字符,中文为10个,英文或者半角空格为20个,这是否是我原来的工程里面某个属性设置错误??
      

  3.   

    SetLimiteText的nMax参数
     MSDN 中写到 
    The text limit is the maximum amount of text, in characters, that the edit control can accept.
    LimiteText nMax的描述为
    Specifies the length (in bytes) of the text that the user can enter. If this parameter is 0, the text length is set to UINT_MAX bytes. This is the default behavior.照道理来说是应该调用LimiteText,但是效果跟 LimteText 一样,这个EDIT我子类化过,但是没有改写这两个限制函数,是否是因为这个函数不支持子类化? 这个问题困扰了我很多天。现在暂时用的自己做的限制,但是却苦于没有API做出来的那样的效果。
    我是在 EN_CHANGE 中处理的.
    如果这个字符串大于某个值就把它右边那部分裁减掉.