总结 虽然本期参赛的朋友较少,但是却有3种不同的方法,这点还是值得欣慰的。本期的题主要是考察一下Sendmessage函数的用法,从此函数的名称就可以知道他的用途,就是发送消息。消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录中包含了消息的类型以及其他信息。windows的消息有1000多种,每个控件都会有一些对应的消息,Listview控件就有125种消息,列表框、文本框、组合框等都有自己的消息,通过Sendmessage发送这些消息可以实现一些控件本身没有的属性,但是遗憾的是,要发送消息必须要有句柄,而在VBA里大部分控件都没有句柄了。关于windows的消息机制,我在附件里提供一些资料,需要了解的朋友可以看看,也可以到网上找找。 从答案来看,第一种通过改变系统颜色来实现效果,即通过SetSyscolor函数改变系统选中项的颜色,此函数会影响到所有的程序,所以使用是会出现屏幕闪动,而且用完之后需要还原系统默认的设置,所以这种方法不值得推荐。 第二种方法(willin200方法一)是通过拦截窗口函数,此方法较为复杂。 第三种方法,通过发送LVM_SETTEXTBKCOLOR消息直接改变listview的底色,这种方法最简单(参考willin200方法二) 第四种方法,通过绘制矩形覆盖到选中的项上,也可以实现效果,此方法也比较简单,但是需要注意单位的转换,因为API函数的单位一般都是象素(pixel),而VBA的单位是磅(point),而且不能直接转换,仍需要API函数来转换。使得此方法也稍显罗嗦。 Sendmessage的方法这里就不提供了,参考willin200方法二,很简单,就是发送2条消息。这里提供方法四供参考。
[此贴子已经被作者于2007-11-4 21:47:42编辑过] |