CDockablePane使用时问题

原文地址




CDockablePane是vs2008后提供的一个很好的父类,在使用的过程中一般有两种方法:

(1)新建一个对话框,然后新建一个类,基类为CDialog或者CDialogEx,为了使用CDockPane将对话框基类改为CDockPane,不能使用多继承,因为MFC不支持多继承!然后将构造函数中CDialogEx和DoDataExchange中涉及到的改为CDockabelPane即可;

(2)新建一个MFC类,基类直接指定为CDockabelPane即可,如果想插入其他的资源显示在该Pane上,将对话框作为其成员变量,在Oncreate函数中create该对话框然后在Onsize中将对话框移动覆盖整个Pane区域即可;



问题来了,虽然你建立好了你自己的Pane并且任意放置你想放置的东西,但是但你放大或缩小MainFram时或者你拖动Pane边框时会留下残影,这个一个很悲剧的事情,最后我试了试,在Onsize中用Invalidate和InvalidateRect都不好使,甚至用最直接的UpdateWindow都无法解决该残影问题,没办法,只好覆盖OnPain进行定制重绘,用其北京色重新绘制!!方法终于解决了!!



但是问题又来了,如果你重写OnPaint方法,不应该在你绘制之前再次调用CDockablePane::OnPaint方法,也就是不能调用父类的OnPaint方法,去掉父类的OnPaint方法或者你在绘制完了你自己的之后在调用父类的OnPaint方法如:


A.

//CDockablePane::OnPaint();

CPaintDC dc(this); // device context for painting

// TODO: 在此处添加消息处理程序代码

// 不为绘图消息调用 CDockablePane::OnPaint()


CRect rc;

GetClientRect(rc);

CBrush   brush; 

brush.CreateSolidBrush(COLORREF(RGB(255, 255, 255)));

dc.FillRect(&rc,&brush);

brush.DeleteObject();




或者:


CPaintDC dc(this); // device context for painting

// TODO: 在此处添加消息处理程序代码

// 不为绘图消息调用 CDockablePane::OnPaint()


CRect rc;

GetClientRect(rc);

CBrush   brush; 

brush.CreateSolidBrush(COLORREF(RGB(255, 255, 255)));

dc.FillRect(&rc,&brush);

brush.DeleteObject();


CDockablePane::OnPaint();



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值