VB6列表不显示时所选项目的列表视图颜色';我没有焦点
在Windows 10中没有焦点的VB6列表不显示时所选项目的列表视图颜色';我没有焦点,vb6,Vb6,在Windows 10中没有焦点的Listview上,Listview项目非常微弱地高亮显示。我知道这取决于系统主题 在此图像中,选择了项目编号3 是否有任何方法可以通过编程更改,使其变成更暗的灰色,更可见。在早期版本的Windows中,标准主题显示为深灰色。以下是解决此问题的有效方法。它涉及使用子类化和win api调用,因此请谨慎行事 此代码使用由vbAccelerator提供的,尽管您应该能够使用任何子类化技术。总之,KillFocus消息被覆盖以实现我们的目标 Option Expl
Listview
上,Listview
项目非常微弱地高亮显示。我知道这取决于系统主题
在此图像中,选择了项目编号3
是否有任何方法可以通过编程更改,使其变成更暗的灰色,更可见。在早期版本的Windows中,标准主题显示为深灰色。以下是解决此问题的有效方法。它涉及使用子类化和win api调用,因此请谨慎行事 此代码使用由vbAccelerator提供的,尽管您应该能够使用任何子类化技术。总之,
KillFocus
消息被覆盖以实现我们的目标
Option Explicit
Implements ISubclass
Private Const LVS_SHOWSELALWAYS As Long = &H8
Private Const LVIS_FOCUSED As Long = &H1
Private Const LVM_FIRST As Long = &H1000
Private Const LVM_GETNEXTITEM As Long = (LVM_FIRST + 12)
Private Const LVM_SETITEMSTATE As Long = (LVM_FIRST + 43)
Private Const LVNI_FOCUSED As Long = &H1
Private Const LVNI_SELECTED As Long = &H2
Private Const WM_SETFOCUS As Long = &H7
Private Const WM_KILLFOCUS As Long = &H8
Private Type LVITEM
Mask As Long
iItem As Long
iSubItem As Long
State As Long
StateMask As Long
pszText As String
cchTextMax As Long
iImage As Long
lParam As Long
iIndent As Long
iGroupId As Long
cColumns As Long
puColumns As Long
piColFmt As Long
iGroup As Long
End Type
Private Declare Function SendMessageW Lib "user32.dll" (ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Sub Form_Load()
ListView1.ListItems.Add , , "Item Number One"
ListView1.ListItems.Add , , "Item Number Two"
ListView1.ListItems.Add , , "Item Number Three"
ListView1.ListItems.Add , , "Item Number Four"
ListView1.ListItems.Add , , "Item Number Five"
ListView1.ListItems(3).Selected = True
AttachMessage Me, ListView1.hWnd, WM_KILLFOCUS
End Sub
Private Sub Form_Unload(Cancel As Integer)
DetachMessage Me, ListView1.hWnd, WM_KILLFOCUS
End Sub
Private Property Let ISubclass_MsgResponse(ByVal RHS As SSubTimer6.EMsgResponse)
'
End Property
Private Property Get ISubclass_MsgResponse() As SSubTimer6.EMsgResponse
ISubclass_MsgResponse = emrConsume
End Property
Private Function ISubclass_WindowProc(ByVal hWnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim i As Long
Dim lvi As LVITEM
Select Case iMsg
Case WM_KILLFOCUS
'get selected item and remove focus
i = SendMessageW(hWnd, LVM_GETNEXTITEM, -1&, ByVal LVNI_FOCUSED Or LVNI_SELECTED)
If i <> -1 Then
lvi.StateMask = LVIS_FOCUSED
SendMessageW hWnd, LVM_SETITEMSTATE, i, lvi
End If
'return 1 to indicate we processed the message
ISubclass_WindowProc = 1
End Select
End Function
选项显式
实现ISubclass
Private Const LVS_SHOWSELALWAYS As Long=&H8
私有Const lvu聚焦为Long=&H1
私人施工LVM_第一个长度=&H1000
Private Const LVM_GETNEXTITEM As Long=(LVM_FIRST+12)
Private Const LVM_SETITEMSTATE As Long=(LVM_FIRST+43)
私有Const LVNI_聚焦为Long=&H1
私有常量LVNI_选择为Long=&H2
私有常量WM_SETFOCUS As Long=&H7
私有Const WM_KILLFOCUS As Long=&H8
私有类型LVITEM
面具一样长
尽可能长
iSubItem尽可能长
国家只要
国家面具
pszText作为字符串
cchTextMax尽可能长
我想象的一样长
lpram尽可能长
只要
iGroupId尽可能长
cColumns尽可能长
puColumns一样长
皮克尔夫姆特一样长
iGroup尽可能长
端型
私有声明函数SendMessageW Lib“user32.dll”(ByVal hWnd为Long,ByVal uMsg为Long,ByVal wParam为Long,ByRef lParam为Any)为Long
专用子表单_加载()
ListView1.ListItems.Add,“项目编号1”
ListView1.ListItems.Add,“第二项”
ListView1.ListItems.Add,“第三项”
ListView1.ListItems.Add,“第四项”
ListView1.ListItems.Add,“第五项”
ListView1.ListItems(3).Selected=True
附件消息我,ListView1.hWnd,WM_KILLFOCUS
端接头
私有子表单_卸载(取消为整数)
DetachMessage Me,ListView1.hWnd,WM_KILLFOCUS
端接头
私有财产出租子类响应(ByVal RHS作为SSubTimer6.EMsgResponse)
'
端属性
私有属性获取ISubclass_msgressponse()作为ssubtime6.EMsgResponse
ISubclass\u msgressponse=emrConsume
端属性
私有函数ISubclass_WindowProc(ByVal hWnd为Long,ByVal iMsg为Long,ByVal wParam为Long,ByVal lParam为Long)为Long
我想我会坚持多久
将lvi设置为LVITEM
选择案例iMsg
案例WM_KILLFOCUS
'获取所选项目并删除焦点
i=SendMessageW(hWnd,LVM_GETNEXTITEM,-1&,ByVal LVNI_FOCUSED或LVNI_SELECTED)
如果i-1那么
lvi.StateMask=LVIS\u聚焦
sendmagesw hWnd,LVM_SETITEMSTATE,i,lvi
如果结束
'返回1表示我们已处理该消息
ISubclass_WindowProc=1
结束选择
端函数
以下是解决同样问题的方法。这不容易做到。也许是API调用?它不是重复的。我问的是当listview没有焦点时更改所选项目的颜色。是否强制项目保持焦点?现在我们如何判断它是否有焦点?控件会得到我的键盘输入吗?@CodyGray该项实际上没有焦点。焦点矩形将被删除,项目将保持原始背景色。该控件仍然允许键盘输入。也许在视觉上并不理想,但根据应用程序的要求,它可能就足够了。