我想继承ListBox控件并设置LBS_OWNERDRAWVARIABLE
样式。子类化没有问题,我可以通过自己的WndProc获取消息。 (实际上,在这种情况下,我将ListBox的父类子类化,因为它应该接收WM_MEASUREITEM
和WM_DRAWITEM
消息。问题是,我从未收到WM_MEASUREITEM
或WM_DRAWITEM
消息,控件继续自行绘制。
WM5.0及更高版本应支持这两种风格:
WinCE3.0既不支持:http://msdn.microsoft.com/en-us/library/ms959988.aspx
WinCE5.0支持:http://msdn.microsoft.com/en-us/library/aa453299.aspx
即使LBS_OWNERDRAWFIXED
也是一个开始,但我无法继续工作。
我最好的猜测是LBS_OWNERDRAWx
样式需要在CreateWindowEx()
时间设置,因为SetWindowLong()
似乎不会改变它。如果是这种情况,CF不公开任何让我覆盖窗口创建的方法,也不暴露任何类似CreateParams(在完整框架中)或PreCreateWindow()允许在创建之前修改窗口样式的东西。 (他们都在Control
班级,但他们是internal
,因此无法访问。
有没有人设法在CF上使用实际的Windows ListBox控件成功完成所有者绘图(甚至修复)?或者,有没有人想出一种方法来覆盖在基于控件的控件中传递给CreateWindowEx()的窗口样式?如果是这样,请分享您的秘密: - )
注意:我不想从头开始创建列表控件;我能做到这一点,那里有很多很好的例子,但这不是这个问题的关键。
CF2.0; WM6.1。