5.重载控件:(重载CStatic为其动态添加滚动条)

本文介绍了如何在MFC中重载CStatic控件以添加滚动条。通过创建CSticPic类并继承自CStatic,使用OnPaint()函数初始化滚动条,并在UpdatePic函数中根据滑块位置更新显示内容。此外,处理OnMouseWheel和OnVScroll消息以实现滚动条的交互。
摘要由CSDN通过智能技术生成

以下内容整理自博客,忘记所属博主了。非常抱歉。

控件的自绘

  常见的控件自绘的方法有父窗口的OnDrawItem()函数、子控件的DrawItem()函数、子控件的CtlColor()函数、子控件的OnPaint()函数,子控件的OnNMCustomdraw()函数等。自绘控件的话需要控件具有Owner Draw属性,通过Create()创建控件的时候添加BS_OWNERDRAW属性,或者在资源视图中右击控件->属性->Owner Draw设为true。

 

  1、父窗口的OnDrawItem()函数、子控件的DrawItem()函数

 

  在MFC中子控件要绘制的时候框架就会向父窗口发送WM_DRAWITEM消息,而父窗口会在WM_DRAWITEM消息响应函数OnDrawItem()里调用子控件的DrawItem()函数,所以我们既可以在父窗口的OnDrawItem()函数里绘制控件,也可以重载子控件DrawItem()函数,在DrawItem()里自绘控件。一般都是选择在子控件的DrawItem()函数里绘制控件,这样可以避免父窗口代码臃肿。

 

  不是所有设置成自画类型的控件都会调用父窗口的OnDrawItem,例如ListBox的自画,你就必须重载CListBox的DrawItem方法和MeasureItem方法才可以,但按钮、菜单等的自画则会调用OnDrawItem。

 

  2、子控件的CtlColor()函数

 

  子控件开始绘制之前,还会向宿主类发送WM_CTLCOLOR消息,对应的消息响应函数为OnCtlColor,而宿主类收到WM_CTLCOLOR消息后会向子控件发送=WM_CTLCOLOR反射消息,让子控件有一个自己处理绘制的机会(这就是MFC中的消息反射机制),子控件中=WM_CTLCOLOR消息响应函数为CtlColor()。我们一般在CtlColor中对子控件设置控件的前景颜色、背景颜色、画刷类型、字体等但不能改变元素的界面框架,这是DrawItem所能干的。

 

  如果同时有DrawItem(子类),OnDrawItem(宿主类),CtlColor(子类),OnCtlColor (宿主类),则它们的调用顺序是:OnCtlColor—>CtlColor—>OnDrawItem—>DrawItem。

 

  3、子控件的OnNMCustomdraw()函数

 

  一些控件在绘制的时候会向宿主类发送NM_CUSTOMDRAW消息&#x

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值