主题:ColorCombo
天天学习
[专家分:4570] 发布于 2009-12-11 12:33:00
Combo和ListBox彩色Item字体、背景的示例程序
有个问题就是,对于ListBox,显示的Item是乱码。
回复列表 (共5个回复)
沙发
tanchuhan [专家分:15140] 发布于 2009-12-11 12:44:00
我这怎么没有乱码,显示正常.
只不过我用你代码编译运行,选定项下方有条大概是控件宽度一半的黑线.
你编译的那个完全正常.
板凳
tanchuhan [专家分:15140] 发布于 2009-12-11 13:00:00
[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 楼
天天学习 [专家分:4570] 发布于 2009-12-11 13:30:00
colorCombo-HookCreate这个工程编译成exe后运行时,ListBox和没有进行任何处理时是一样的,item文字显示正常,ComboBox倒是有渐变色,但bkColor与Rect很不协调。在IDE下运行时,ListBox有渐变色,但显示为乱码。
另一个工程的exe运行时和在IDE里运行的表现都是一样的,ListBox的Item颜色不是渐变的,且在每个Item下的有黑线。
4 楼
tanchuhan [专家分:15140] 发布于 2009-12-11 14:18:00
听你说才发现里面还有另外一个工程.
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 楼
天天学习 [专家分:4570] 发布于 2009-12-11 17:03:00
按上面所说的,修改成
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。回贴中无法添加附件,不然上传最新的代码。
我来回复