问题:我在一个对话框程序上放置了一个RichEditBox控件,想从一个文本文件里面读取出所有字符显示出来。
该对话框在一初始化的时候自动全屏,RichEditBox控件的大小也随对话框大小自动调整。
目前我已经取到RichEditBox控件的长宽(像素点),同时将从文件准中读取的所有字符赋值给字符数组并去掉所有的回车换行。我想达到的效果是:计算出当前RichEditBox控件每行能显示的字符个数、能显示的字符行数。但不知道如何获取RichEditBox控件中字符的字符的宽度和高度,所以请高手帮忙如何获取(获得字符的宽度、高度像素点,这样用控件的宽度、高度相除就可以得出可以显示的字符个数了)。另外,我想在手动输入字符串到RichEditBox控件中到最后一个字符时,自动回车换行到下一行。请问如何实现呢,谢谢

解决方案 »

  1.   

    BOOL GetTextExtentPoint32( 
     HDC hdc, // 相关设备句柄 
     LPCTSTR lpString, // 字符串 
     int cbString, // 字符串的字符数(即长度) 
     LPSIZE lpSize // 用来接收字符串的尺寸 
    ); 
    这个函数可以取得设备句柄上面一个字符的尺寸,以前在 Static 控件、列表框上面有用过,如果字符全半角或者是全部全角的到好办一点,碰到一些全角一些半角的,要搞死人,当时也没有好的解决方法,楼主解决了不要忘了总结一下....
      

  2.   

    自动换行的问题,给 RichEdit 发 EM_SETTARGETDEVICE 消息即可.
    e.g. 在对话框的OnInitDialog函数里面添加如下程序,就能实现自动换行。HDC hdc = ::GetDC(this->GetDlgItem(IDC_RICHEDIT21)->m_hWnd);
    HWND hRE = this->GetDlgItem(IDC_RICHEDIT21)->m_hWnd;
    ::SendMessage(hRE, EM_SETTARGETDEVICE, (WPARAM)hdc, 400);
      

  3.   

    我是想实现能够自动换2行或者3行的功能,但EM_SETARGETDEVICE这个消息只能换一行,即使发送3次相同的消息也只能换一行,请问有什么方法解决这个问题吗?
      

  4.   

    或者更简单一点的说:就是我从文本文件中读取数据显示在RichEditbox里面,但是我想得到显示的字符宽度和高度,请教高手如何实现?