问题标签 [comctl32]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
624 浏览

c# - 在 .NET 中检测 COMCTL32 版本

如何确定 C# .NET 应用程序正在使用哪个版本的 comctl32.dll?我看到的这个问题的答案通常涉及从 Windows\System 中的物理文件获取版本信息,但由于并行考虑,这不一定是实际使用的版本。

0 投票
1 回答
304 浏览

winapi - 如何在 Comtl32.dll ListView 中获得矩形多选行为

可能重复:
ListView 多选行为?

ListViewv6.0中的Comtl32.dll多选(使用Shift键时)如下(x表示选中)

p>

ListView 的早期版本如下:

p>

有没有办法让它做第一种方式(comctl32 v6.0方式)?

0 投票
1 回答
3465 浏览

c - 使用 Win32 和视觉样式的按钮背景透明度

编辑:如果有人以前在win32中尝试过这个,我是否通过使用DrawThemeBackground()朝着正确的方向前进?

我最近使用 ComCtl32.dll 版本 6 的清单启用了视觉样式。Win32 中的视觉样式示例:视觉样式

按钮看起来很棒,但我不知道如何使按钮周围的背景透明。请查看示例图片:http ://www.freeimagehosting.net/image.php?2bdeff33ba.jpg

我的主窗口背景颜色设置为深灰色:

常用控件初始化为:

我创建了按钮窗口:

按钮在白色背景上看起来很好,但边框在其他任何东西上都可见。是否可以使按钮周围的边框透明?

0 投票
4 回答
3000 浏览

c# - C#:调试器中的 comctl32.dll 版本 6

我正在为 TaskDialog 使用WindowsAPICodePack。当我尝试显示对话框时,它说它需要加载 comctl32.dll 的版本 6。所以我将版本 6 添加到 app.manifest 并尝试运行它。仍然没有运气。我去了 Debug 文件夹并在没有 Visual Studio 的情况下运行程序,它工作正常。我猜 Visual Studio 没有使用清单文件……我想知道是否有办法让它做到这一点。

0 投票
3 回答
878 浏览

c++ - 在通用文件对话框中获取当前选择文件的真实名称?

可以在通用对话框的列表视图中获取所选项目的文本。但是无法获得它的 PIDL,如果用户选择隐藏已知扩展名(默认),那么如果没有扩展名或 PIDL,就无法真正判断选择了哪个文件。

所以解决这个问题的可能方法是:

  1. 从标准打开文件对话框中获取 IShellView。底层 IShellView 可以告诉当前选择的 PIDL 是什么。因此,如果我可以简单地获得 IShellView,我会很高兴。不幸的是,我看不到 CDM_xxx 会这样做。而且我无法想到任何可能实现它的东西!:(
  2. 还有什么想法?!

我们过去依赖于这样一个事实,即 Windows 9x、2000 和 XP 版本的通用文件对话框将每个项目的 PIDL 存储在 LVITEM 数据中(最初归功于 Paul DiLascia):

LPCITEMIDLIST pidlItem = (LPCITEMIDLIST)pListCtrl->GetItemData(nItem);

但是,从 Vista 的通用控件及更高版本开始,该技术失败了 :(

有什么想法吗?

编辑:我不仅需要能够获取列表视图中当前选定项目的信息,还需要获取列表视图中所有项目的信息。

EDIT2:我需要深入挖掘的原因:

在我们的应用程序的早期版本中,我们提供了以下功能: (1) 按下自定义按钮“预览”以关闭对话框,但将当前显示在视图中的项目列表按其可见顺序传输到应用程序,以及当前突出显示的索引。必须完全指定此列表 - 查看全部为“J1329192”的 3 个文件(当确实有 3 个文件“J1329192.xyz”“J1329192.xzy”和“J1329192.zyx”[按此顺序)是没有用的。

允许用户在“文件名:”字段中键入部分文件名过滤器,并且通用对话框将仅显示与给定部分过滤器匹配的文件,按用户选择的排序顺序。因此,要准确地向应用报告用户想要预览的内容,我们需要能够从列表视图控件(或公共对话框本身)中查询该信息。

我们还对文件对话框进行了其他增强 - 包括将用户当前选择显示为缩略图的就地预览窗格,以及自定义最近位置界面等。所有这些都是可能的(有很多工作) 在 Vista 之前。发布 Vista 后,我遇到了墙上的墙。目前,我们使用的标准文件对话框只有很少的我们自己的功能,这并不适合客户(功能 X 发生了什么?!)

还有其他增强功能,但这是一个很好的粗略概述。它们都归结为要求“真的,老实说,索引 X 的视图中具体是什么文件?”的知识。而且出于未知的原因——微软似乎并不觉得有必要提供这样的界面。事实上,他们从来没有这样做过。只有通过一些黑客攻击和逆向工程,我们才能弄清楚事情是如何在幕后工作的,并获得所需的信息。是的,这是不受支持的,是的,MS 不可避免地破坏了我们的代码。我真的不怪他们——我确实觉得令人讨厌的是,他们更新的、更漂亮的界面比他们的旧界面封闭得多——而且他们没有提供更多的前期界面——支持的界面——来进行这些对话增强.

0 投票
3 回答
2225 浏览

windows - 为什么 TVM_GETITEM 消息在 comctl32.ocx 或 mscomctl.ocx 树视图上失败?

我编写了一个函数,它可以产生树视图项的文本,即使树视图位于远程进程中。该函数在远程进程中分配两个内存块,填充 TVITEM 结构(复制到远程进程中),发送 TVM_GETITEM 消息,最后将第二个远程内存块的内容读回本地缓冲区。这是代码:

此代码与您在将WC_TREEVIEW类名传递给CreateWindow. 但是,我注意到它不适用于 MS Common Controls v5 (comctl32.ocx) 或 MS Common Controls v6 (mscomctl.ocx) 提供的较新的树。在这些情况下,返回的文本始终为空(缓冲区全为零)。我还注意到 SendMessage 调用返回零(因此// handle error上面的注释表示的错误处理开始起作用)。我不清楚这是否真的表示错误,无论如何缓冲区都充满了零。

所有其他树视图消息(如 TVM_GETITEMRECT)似乎都运行良好。

有人知道这是为什么吗?我尝试使用 UNICODE 标志(我注意到它TVM_GETITEM被定义为TVM_GETITEMATVM_GETITEMW),但这似乎没有帮助。

0 投票
1 回答
165 浏览

c++ - 我的 Word 加载项的对话框不使用视觉样式

我使用普通的 Win32 API 在 C++ 中编写了一个 Word 插件。它会打开一些对话框,但这些对话框在 Vista+ 上始终显示为没有 commctl6 视觉样式。清单作为 RT_MANIFEST 和资源 ID - 2 就位(如下所示)。当我从我自己的测试应用程序中调用相同的功能/对话框时,视觉样式是可以的。

知道尽管有清单,Word 是如何阻止我的加载项使用视觉样式的吗?

0 投票
0 回答
154 浏览

windows - 使用 XP 主题时的皮肤对话框?

我一直在使用 WM_CTLCOLORSTATIC、WM_CTLCOLORBTN 消息对对话框进行蒙皮:-

此代码将所有静态元素的文本颜色设置为白色,因为背景画笔绘制了低对比度的图像。

Ive(仅)最近更新为在我的对话框上使用 Common Controls 6 和 XP-Themeing 外观,但控件上的所有文本都已“消失”,因为它再次以默认黑色绘制。

xp-themeing下有没有其他方法可以控制控件的文本颜色?还是我现在需要考虑 ownerdraw :-( ?

(并且所有者绘制实际上不是一种选择 - 如果我拥有所有控件,那么首先切换到通用控件 6 的整个动机就会消失)。

0 投票
3 回答
13159 浏览

c++ - 如何在没有清单的情况下启用视觉样式

根据文档

“如果您希望您的应用程序使用 ComCtl32.dll 第 6 版,您必须添加一个应用程序清单或编译器指令来指定应该使用的第 6 版(如果可用)。”

注意到上面的逻辑或了吗?那么这个神秘的编译器指令是什么?

我有一个完全包含在单个 .cpp 文件中的本机 Win32 C++ 应用程序。没有资源文件、清单文件等。我想保持这种状态,但我也想使用视觉样式。

0 投票
1 回答
528 浏览

winapi - ListView 多选行为?

Comtl32.dll v6.0中的ListView做多选(使用Shift键时)如下(x表示选中)

ListView 的早期版本如下:

有没有办法让它做第一种方式(comctl32 v6.0方式)?

谢谢约翰