码迷,mamicode.com
首页 > 其他好文 > 详细

自绘控件时添加LBS_OWNERDRAWFIXED风格,离奇报错的解决方案!

时间:2015-04-16 19:53:56      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:lbs_ownerdrawfixed   自绘控件   mfc   报错   

     在自绘CListBox的时候本人遇到过一件很头痛的事情,当然,这点小问题对于大牛来说,压根不屑一顾,可是初学者遇到的话,一时半会还真没什么办法解决。

     自绘控件很简单,按照书上的步骤一步一步来操作即可,就拿自绘CListBox为例。

     我们从CListBox派生出一个子类CListBoxEx,然后添加DrawItem和MeasureItem函数即可。我不知道有多少人和我一样,喜欢通过机器自动给我们添加。技术分享

    机器添加代码之后,我们的类大概就变成了这样子:

技术分享

      好了,我们姑且在这两个函数里面什么也不干吧!现在我们动态创建一个CListBoxEx控件吧!

技术分享

     现在可以启动程序了,是不是一启动就报错呢?

技术分享

     我们去掉LBS_OWNERDRAWFIXED这下子又可以了,这倒是奇怪了,完全按照书上写的啊,我们跟踪一下断点。

技术分享

    既然程序执行到了MeasureItem说明前面设置的自绘起了作用,不过CListBox的MeasureItem函数一进入马上触发中断,这也就是说,你一旦设置了LBS_OWNERDRAWFIXED风格,必须重写DrawItem和MeasureItem函数,同理设置了LBS_SORT风格,也必须重写CompareItem函数,他们都是虚函数。

技术分享

      问题来了,我们不是重写了DrawItem和MeasureItem函数吗?请看清楚了,我们写的函数前面还有一个afx_msg限定,这是一个CWnd类的消息响应函数,是虚函数吗?

技术分享

     看清楚了,我们应该是重写虚函数,而不是响应消息函数,添加后的消息如下图所示:

技术分享

     带virtual修饰符的,这样才是正确的,少年,别手一溜,就加错了函数,引起了不必要的错误,现在编译一下,应该就不存在错误了!


   

自绘控件时添加LBS_OWNERDRAWFIXED风格,离奇报错的解决方案!

标签:lbs_ownerdrawfixed   自绘控件   mfc   报错   

原文地址:http://blog.csdn.net/lishuhuakai/article/details/45079477

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!