winforms – .NET ListView和Windows 7

也许我错过了什么,但…… Windows 7中的ListView控件在所选项目周围显示一个突出显示,看起来像一个3D蓝色半透明矩形(我不是在谈论选择矩形,而是围绕实际所选项目的矩形).当悬停在物品上时,它甚至会显示较亮的矩形. 但是,当我在WinForms中使用ListView时(即使

也许我错过了什么,但……


Windows 7中的ListView控件在所选项目周围显示一个突出显示,看起来像一个3D蓝色半透明矩形(我不是在谈论选择矩形,而是围绕实际所选项目的矩形).当悬停在物品上时,它甚至会显示较亮的矩形.

但是,当我在WinForms中使用ListView时(即使是双缓冲),所选项目只有一个纯蓝色背景(并且没有悬停背景),这看起来比资源管理器中的列表更不专业.

有谁知道我应该调用哪些秘密API函数来使.NET ListView看起来与其他操作系统一致?

例如,这是我用C语言编写的一个应用程序,使用Windows 7中的标准ListView控件:(注意高亮和悬停矩形)

这里是使用WinForms在C#中重写该应用程序:(注意原始突出显示并且没有悬停)

好吧,我完全弄明白了,这可能会帮助那些被这个问题困扰的人.

我开始注意到C Builder中的ListView控件在Windows 7下看起来“正确”,所以我查看了VCL的源代码,看看他们正在做什么样的魔术让ListView看起来像Windows中的列表控件资源管理器.我偶然发现了一行看起来很有希望的代码:

SetWindowTheme(Handle,'explorer',nil);

从SDK文档中,此函数“使窗口使用与其类通常使用的不同的视觉样式信息集”.

所以,我尝试在我的WinForms ListView控件上调用此函数:

[DllImport("uxtheme.dll",CharSet = CharSet.Unicode)]
public static extern int SetWindowTheme(IntPtr hWnd,String pszSubAppName,String pszSubIdList);


SetWindowTheme(myListView.Handle,"explorer",null);

……而且,按照上帝,它有效! ListView最终看起来像属于操作系统的其余部分!谢谢,Borland Inprise Embarcadero!你真的很擅长某事!

作者: dawei

【声明】:永州站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部