众所周知,Vista/Win7/Win8下系统的ListView和TreeView的Item并不是传统的蓝底白字的,而是具有自己特有的风格(不知道我说啥的话可以对比一下下面的效果图)。不过用manifest并不能实现这个效果,那么这个效果在VB中应该怎么实现呢?可能有些同学已经知道怎么设置这种系统风格了,我从一些C++代码中发现了一种实现方法,其实很简单的,下面分享一下:
*先申明一下API
Private Declare Function SetWindowTheme Lib "uxtheme.dll" (ByVal hWnd As Long, ByVal pszSubAppName As String, ByVal pszSubIdList As String) As Long
*实现代码
Call SetWindowTheme(m_hListView, StrConv("explorer" & Chr(0), vbUnicode), vbNullString)
应用这个代码前提要有manifest文件或者将manifest写入到资源文件中,这里就不详细说了。另外,应用系统样式后很可能会有重绘残影或者闪烁的问题,建议为控件加上 LVS_EX_DOUBLEBUFFER(ListView)和TVS_EX_DOUBLEBUFFER(TreeView)风格来强制使用双缓冲进行重绘,这样就不就闪烁或者有残影叠加了。
Vista/Win7下的效果:

Win8下的效果:

仅有manifest而不设置SetWindowTheme的默认效果:

*先申明一下API
Private Declare Function SetWindowTheme Lib "uxtheme.dll" (ByVal hWnd As Long, ByVal pszSubAppName As String, ByVal pszSubIdList As String) As Long
*实现代码
Call SetWindowTheme(m_hListView, StrConv("explorer" & Chr(0), vbUnicode), vbNullString)
应用这个代码前提要有manifest文件或者将manifest写入到资源文件中,这里就不详细说了。另外,应用系统样式后很可能会有重绘残影或者闪烁的问题,建议为控件加上 LVS_EX_DOUBLEBUFFER(ListView)和TVS_EX_DOUBLEBUFFER(TreeView)风格来强制使用双缓冲进行重绘,这样就不就闪烁或者有残影叠加了。
Vista/Win7下的效果:

Win8下的效果:

仅有manifest而不设置SetWindowTheme的默认效果:
