回 帖 发 新 帖 刷新版面

主题:ColorCombo

Combo和ListBox彩色Item字体、背景的示例程序
有个问题就是,对于ListBox,显示的Item是乱码。

回复列表 (共5个回复)

沙发

我这怎么没有乱码,显示正常.
只不过我用你代码编译运行,选定项下方有条大概是控件宽度一半的黑线.
你编译的那个完全正常.

板凳

[code=c]
Call SendMessage(tItem.hwndItem, LB_GETTEXT, tItem.itemID, ByVal sBuff)
sItem = Trim(sBuff)
[/code]
Trim在这里是没有意义的,并不能截断vbNullChar后面的字符.
比较合适的办法是这样:
[code=c]
length = SendMessage(tItem.hwndItem, LB_GETTEXT, tItem.itemID, ByVal sBuff)
sItem = Left(sBuff, length)

or

length = InStr(sBuff, vbNullChar)
If (n <> 0) Then
    sItem = Left(sBuffer, length - 1)
End If
[/code]

不过你后面是用API来读取这段字符,因此截不截断都关系不大.但是
TextOut tItem.hdc, tItem.rcItem.Left, tItem.rcItem.Top, ByVal sItem, Len(sItem)
Len(sItem)还是会恒为255的

如果不截断可以这样:
[code=c]
TextOut tItem.hdc, tItem.rcItem.Left, tItem.rcItem.Top, ByVal sBuff, lstrlen(sBuff)
TextOut tItem.hdc, tItem.rcItem.Left, tItem.rcItem.Top, ByVal sBuff, InStr(sBuff, vbNullChar) - 1
[/code]

3 楼

colorCombo-HookCreate这个工程编译成exe后运行时,ListBox和没有进行任何处理时是一样的,item文字显示正常,ComboBox倒是有渐变色,但bkColor与Rect很不协调。在IDE下运行时,ListBox有渐变色,但显示为乱码。
另一个工程的exe运行时和在IDE里运行的表现都是一样的,ListBox的Item颜色不是渐变的,且在每个Item下的有黑线。

4 楼

听你说才发现里面还有另外一个工程.

If tItem.CtlType = ODT_COMBOBOX Or ODT_LISTBOX Then
->
If tItem.CtlType = ODT_COMBOBOX Or tItem.CtlType = ODT_LISTBOX Then
前者恒成立,因为Or后面恒真.
tItem.CtlType = ODT_COMBOBOX时,  (&HFFFFFFFF Or &H00000002) = &HFFFFFFFF
tItem.CtlType <> ODT_COMBOBOX时, (&H00000000 Or &H00000002) = &H00000002

'\0'在VB里已经定义好了,为什么那么多人喜欢用函数调用语句Chr(0)? vbNullChar不是很简明吗?


乱码问题,只要把List1的Style改为"1 - Checkbox"就OK了.

5 楼

按上面所说的,修改成
If tItem.CtlType = ODT_COMBOBOX Or tItem.CtlType = ODT_LISTBOX Then
同时,把List1.Style改为1-checkBox后,乱码问题解决了
但点击ListBox的Item时,感觉要点两次才能选中。
把If (tItem.itemState And ODS_SELECTED) 
改为 If (tItem.itemState And ODS_FOCUS)后,正常了。

但bkColor与Rect很不协调的问题还是没办法解决。可能用SetBkColor没办法设置成渐变色的吧。

PS。回贴中无法添加附件,不然上传最新的代码。

我来回复

您尚未登录,请登录后再回复。点此登录或注册