在CEDIT中,当我把CEDIT设置为多行文本时,有没有一个方法可以设置每行文字的最大长度(目前没找到),CEDIT的SetLimitText设置文字的最大长度,为什么用SetWindowText可以设置超过最大长度的文字,有什么方法可以让SetWindowText设置的文本长度不超过最大长度呢???

解决方案 »

  1.   

    "有没有一个方法可以设置每行文字的最大长度"
    把EDIT框的Horizontal scroll、Auto HScroll属性去掉。
      

  2.   

    谢谢,有什么方法可以让SetWindowText设置的文本长度不超过最大长度呢???这个问题如何解决呢???
      

  3.   

    哦,在没有水平滚动条的时候是这样,但有什么方法可以让SetWindowText设置的文本长度不超过最大长度呢???这个问题如何解决呢???
      

  4.   

    现在是我从文件中取得一段文本然后显示在CEDIT中,我想限制CEDIT的最大长度,仅此而己。现在虽然直接输入文本不会超过最大长度,但是通过SetWindowText方法会设置超过长度的文本,我如何将一段长的文本变短以后设到CEDIT可中呢??谢谢大家。
      

  5.   

    SetWindowText会发送WM_SETTEXT消息,我们可以通过拦截这个消息实现限制长度。
    但不知道为什么我在dlg的PreTranslateMessage中拦截不到这个消息,试了好多方法都不行,最后只好麻烦点,子类化后自已做个消息函数了。请大虾们指点
    方法如下:
    WNDPROC OldProc;
    int Length = 10;  
    BOOL CEditLengthDlg::OnInitDialog()
    {
       ....
       OldProc=(WNDPROC)::GetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd, GWL_WNDPROC); 
       ::SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC, (LONG)TextProc);
       ....
    }
    LRESULT CALLBACK TextProc(HWND hwnd, UINT uMsg, WPARAM wParam,LPARAM lParam)
    {
       if (uMsg == WM_SETTEXT)
       {
           CString str((LPCSTR)lParam);
           if (str.GetLength() > 10)
           {
              str = str.Left(10);
              return CallWindowProc(OldProc,hwnd, uMsg,wParam,(LPARAM)(LPSTR)(LPCTSTR)str);
           }
       }
       return CallWindowProc(OldProc,hwnd, uMsg,wParam,lParam); 
    }
      

  6.   

    i_noname(晚九朝五)(恶补C++),哥们,我是是使用WM_SETTEXT消息设置文字的,我这里不能用MFC的类。
      

  7.   

    if (uMsg == WM_SETTEXT)
       {
       if (strlen((LPSTR)lParam) > 10)
       {
          char str[11];
          memcpy(str,(LPSTR)lParam,10);
          str[10] = '\0';
          return CallWindowProc(OldProc,hwnd, uMsg,wParam,(LPARAM)str);
       }
    }
      

  8.   

    现在的问题是如果比最大的长度在文本你必须自己去截断,但是可能把一些文字搞成乱码了啊。(因为可能将汉字截掉一部分了啊)
    ---------------------
    先将你的ANSI字符串转换为UNICODE, MULTIBYTETOWIDECHAR(936,...),然后算宽度GetTextExtentPoint32W或者GetTextExtentExPointW,按宽度截断UNICODE字符串,再转换回ANSI字符串WIDECHARTOMULTIBYTE(936,...).就没有半个中文的问题了.
      

  9.   

    everandforever(Forever) 你可能误解我的意思了啊,我想要的是从一个超过CEDIT最在长度的字符串取得小于或最大长度的字符串(因为可能有中文字),但是不能出现中文字被搞成乱码的清况。
      

  10.   

    嗯.的确是误解了.不过半个汉字的问题,最好是通过UNICODE解决.如上所述.
      

  11.   

    有什么方法可以让SetWindowText设置的文本长度不超过最大长度呢
    --------------------------------------------------------------
    由自己控制,两个方法:
    1. 你可以设一个弄个全局变量,记录可以设置最长的限制数,在用SetWindowText是,就检查是否超过了这个值
    2. 在edit的OnChange中,如果长度超过了要设定的最大长度,则截去后面的部分,重新设置edit的文本即可
      

  12.   

    jszj(老板说mis部不是赚钱的部门...) ,在CEDIT中输入会限制在最大长度中,主要是通过SetWindowText不能限定在最大长度,截去后面的部分,现在我的问题就是如何截去后面的部分,并不出现乱码(文字有中文)?