我实现了一个类:class CRichEditCtrlEx : public CRichEditCtrl
{
//...
afx_msg void OnPaint();
//...
}
void CRichEditCtrlEx::OnPaint()
{
CRichEditCtrl::OnPaint();
CClientDC dc(this);
CRect rect;
GetClientRect(rect);
CBrush brushFrame(RGB(0,0,255));
dc.FrameRect(&rect,&brushFrame);// 画边框
}描述:界面打开的时候界面显示正常,但是当在RichEdit输入文字时下方的边线会重叠在一起或者像图片上这样出现两张直线,请问如何解决?谢谢

解决方案 »

  1.   

    难道是GetClientRect(rect);中多了滚动条所以rect变了?用GetWindowRect,再ScreenToClient转换下行不
      

  2.   

    to 1 楼:
    改成:CRect rect;
    GetWindowRect(rect);
    ScreenToClient(rect);不行,和没改之前的效果一样。
      

  3.   

    rect弄成一个固定值看有问题没,如果没有的话,那你在创建CRichEditCtrl时,用一个CRect的成员变量接收创建时的大小,把这个大小写实
      

  4.   

    这样不可以,我窗体大小可以拖动改变的,窗体大小改变的时候控件大小也会跟着改变。
    另外,当RichEdit有垂直滚动条的时候,如果拖动滚动条那么会出现很多边框线粘在一起。
      

  5.   

    看来是在输入区域里,背景没有刷新导致的,可以用m_myRichEditCtrl->SetEventMask(   ENM_CHANGE);,修改下在EN_CHANGE消息里添加Invalidate进行刷新
      

  6.   

    自己搞定了:void CRichEditCtrlEx::OnPaint()
    {
    CRichEditCtrl::OnPaint();
    CClientDC dc(this);
    CRect rect;
    GetWindowRect(rect);
    rect.left-=1;
    rect.top-=1;
    rect.right+=1;
    rect.bottom+=1;
    ScreenToClient(rect);
    dc.Draw3dRect(rect,RGB(0,0,255),RGB(0,0,255));
    }