RichEdit边框线重叠怎么办

满衣兄 2011-03-08 10:55:57
我实现了一个类:

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输入文字时下方的边线会重叠在一起或者像图片上这样出现两张直线,请问如何解决?谢谢
...全文
152 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fishion 2011-03-08
  • 打赏
  • 举报
回复
看来是在输入区域里,背景没有刷新导致的,可以用m_myRichEditCtrl->SetEventMask( ENM_CHANGE);,修改下在EN_CHANGE消息里添加Invalidate进行刷新
满衣兄 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fishion 的回复:]
rect弄成一个固定值看有问题没,如果没有的话,那你在创建CRichEditCtrl时,用一个CRect的成员变量接收创建时的大小,把这个大小写实
[/Quote]
这样不可以,我窗体大小可以拖动改变的,窗体大小改变的时候控件大小也会跟着改变。
另外,当RichEdit有垂直滚动条的时候,如果拖动滚动条那么会出现很多边框线粘在一起。
fishion 2011-03-08
  • 打赏
  • 举报
回复
rect弄成一个固定值看有问题没,如果没有的话,那你在创建CRichEditCtrl时,用一个CRect的成员变量接收创建时的大小,把这个大小写实
满衣兄 2011-03-08
  • 打赏
  • 举报
回复
to 1 楼:
改成:

CRect rect;
GetWindowRect(rect);
ScreenToClient(rect);

不行,和没改之前的效果一样。
fishion 2011-03-08
  • 打赏
  • 举报
回复
难道是GetClientRect(rect);中多了滚动条所以rect变了?用GetWindowRect,再ScreenToClient转换下行不
满衣兄 2011-03-08
  • 打赏
  • 举报
回复
自己搞定了:

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));
}

15,978

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧