OwnerDraw(二)

本文介绍了如何在MFC中实现自定义ComboBox控件CColorBox,解决WM_MEASUREITEM处理位置、动态创建报错、ListBox与Edit控件的自绘问题。重点在于理解控件的创建过程、消息响应以及自绘细节。
摘要由CSDN通过智能技术生成

以ComboBox订制CColorBox.(动态创建)

一、Question

这些问题是我在网上查找资料,并编写代码所产生的问题。
1.WM_MEASUREITEM应该在哪里处理?
2.动态创建总是中断报错?
3.绘制ListBox控件
4.绘制Edit控件

二、Solution

针对以上问题我所做的解决方案。
1.WM_MEASUREITEM应该在哪里处理?
对于第一次用MFC来写界面,更甚者,从未接触过自己订制控件的我来说,这只有查资料来解决。在网上搜了很多文章,都提到要订制ComboBox必须重载WM_MEASUREITEM成员函数,来设置item的高度。但是我所看过的文章没有一篇指出了应该在哪里重载。我试过在CColorBox里重载消息响应函数,但是执行过程中压根儿没有进入这个函数,于是查阅MSDN,其中明确的指出应该为控件所有者所重载。
由于在WM_MEASUREITEM消息响应函数中,控件尚未创建(没有句柄),无法通过发送消息的形式让CColorBox自己来处理,而在类向导中也没有反射消息,那么只有由父窗口类来处理了。
2.动态创建总是报错?
CColorBox在调用CColorBox::Create进行创建时,可以不指定自绘属性。我重载了PreSubclassingWindow虚函数,并在其中使用ModifyStyle添加自绘属性,也可以用SetWindowLong。
编译能够通过,但执行中断报错。经过调试发现原因可能为以下几种:

  • 必须重载的虚函数没有重载,导致必须的过程没有进行处理。
    如,ComboBox的自绘࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值