问题标签 [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 投票
0 回答
552 浏览

c# - 如何在 C# 中在 Windows 窗体之外显示任务对话框?(comctl v6 未加载)

我喜欢 TaskDialogs 并且经常使用它们,但是我在 Windows Form 类之外调用它们时遇到了麻烦。
在 Winforms 类中,可以像这样简单地调用它们:

因此,如果在运行我的应用程序时抛出任何异常,为了显示一般错误消息,我将同一行写入 static Program.Main()

但是当应该显示这个对话框时,我得到一个NotSupportedExceptionat .Show()

TaskDialog 功能需要加载 comctl32.dll 的版本 6,但当前在内存中加载了不同的版本。

app.manifest将版本定义assemblyIdentity为 6.0 包含在项目文件中。

我做了一些研究,发现 TaskDialog 可能需要一个ApplicationContext,但我不知道如何将非Windows.Form对象传递给它。

我该如何解决这个问题?感谢您的任何建议!


(关于TaskDialog的常见问题,我在不同的NuGet版本上进行了测试,WindowsAPICodePack结果相同。为了最好的重现:Install-Package WindowsAPICodePack-CoreShell。问候)

0 投票
3 回答
369 浏览

winapi - 如何在 WinAPI 中按 ESC 键时取消 Tree-View 控件中的项目标签编辑

我有一个带有树视图控件的对话框,用户可以在其中编辑项目标签。我希望用户能够通过按 ESC 键取消标签编辑。

问题是按 ESC 会立即关闭对话窗口。

我尝试通过TreeView_GetEditControl()调用 TVN_BEGINLABELEDIT 消息来获取 EditBox 控件的句柄并将其子类化以捕获 ESC 键,但是当我这样做时,在编辑框中输入变得不可能。

问题是什么?

以下是相关代码:


PS我注意到当我删除 WM_GETDLGCODE 处理程序时EditBoxCtl_SubclassProc(),可以再次在编辑框中键入,但是我无法从该过程中为 ESC 键捕获 WM_KEYDOWN。

0 投票
0 回答
2605 浏览

c++ - 如何修复模块“COMCTL32.DLL”中地址<>处的访问冲突。读取地址 FFFFFFFF。在 Embarcadero C++ XE5 中

我们在使用 Emabarcadero C++ XE5 开发的桌面应用程序上的 COMCTL32.DLL 中遇到访问冲突错误。这个问题主要发生在用户环境中,他让应用程序在一夜之间运行,并且当他在很长一段时间后访问它时 - 应用程序崩溃了。

堆栈跟踪如下所示

有没有其他人看到过类似的问题?

有什么建议可以解决这个问题吗?

0 投票
1 回答
335 浏览

uwp - 覆盖 UWP 中的 WinSxS 机制。专门针对 ComCtl32.dll

我正在创建一个通用 Windows 应用程序,它使用一个动态库 (wkhtmltopdf),它似乎通过其 Qt 实现依赖于 comctl32.dll。现在,我可以在我的开发机器(Windows 10 Pro 1607 Build 14393.1770)上正常运行该应用程序,但是,在目标机器(Windows 10 Enterprise 2015 LTSB)上,我收到以下错误:

LdrpInitializeNode - 错误:DLL“C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10240.16384_none_49c02355cf03478c\COMCTL32.dll”的初始化例程 67ABDD60 在 DLL_PROCESS_ATTACH 期间失败

运行应用程序时,我注意到我的开发机器有不同版本的这个库(5.82.14393.447)。我知道 comctl32.dll 6.0 是不可再分发的,但我没有看到 5.82 的相同评论。我仍然决定打包我的库版本并LoadPackagedLibrary手动调用。这在我的开发机器上最终加载了两个版本(如 Visual Studio 模块窗口中所示);在我的目标机器上,它加载了“较新”版本,但仍尝试在 WinSxS 上加载该版本,但仍然发生故障:

LdrpPreprocessDllName - 信息:DLL COMCTL32.dll 被 SxS 重定向到 C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10240.16384_none_49c02355cf03478c\COMCTL32.dll

看来我只需要让 WinSxS加载它的 ComCtl32.dll 版本,因为我通过用C:\Windows\WinSxS\x86_microsoft.windows.common-controls_6595b64144ccf1df_5.82.10240.16384_none_49c02355cf03478c\COMCTL32.dll我的库版本替换目标机器来破解。然而,这是不希望的。

有没有办法重新分发 ComCtl32.dll 的工作版本,这样它就不会尝试从 WinSxS 加载它?也许通过清单文件或在目标机器上运行 MSI?

0 投票
0 回答
52 浏览

c++ - 如何将 CListBox 的内容定位在非项目边界上?

不确定这是否可行,但我有两个CListBox需要垂直同步的控件,但这些控件中的数据量可能不同,而且每一行的高度可能不同。我希望无论每个控件中有什么,当我到达一个控件的顶部或底部时,我都会到达另一个控件的相同顶部或底部。

为了做到这一点,我需要垂直滚动项目,使它们不必在项目边界上对齐。像下面的例子:

显示 2 件可以完成的事情和 1 件我需要完成的事情

左侧显示第一行的顶部,中间显示第二行的顶部。右图显示了第 1 行的一部分,这正是我所需要的。

这是可能的,还是我将不得不进行重大重构,要求我将控件换成其他东西?(由于潜在风险,绝对不可取)

哦,在有人问为什么这样做之前,答案是legacy

我仍在研究这个,但如果不能强制控制,是否有一种解决方法,我可以有某种虚拟的CListBox,我可以BitBlt从,或者这需要更多的工作,然后换出控制? 有没有更好的办法?

也许我可以将控件封装在另一个窗口中,该窗口能够拥有更大的视图并将该视图剪辑到我想要看到的内容?

0 投票
1 回答
408 浏览

delphi - Win7 上的 TImageList 读取错误(ComCtl32 问题?) - 它是如何/为什么会发生的?

我需要有关如何追踪/解决此问题的想法:

我有一个潜在客户说在 Windows 7 32bit 上我的软件出现了这个错误:

imagelist 无法从流中读取 ImageList 数据

人员提供了以下附加信息:

  • 程序在启用 Areo 主题的情况下工作
  • 程序在经典主题上抛出错误
  • 已安装 IE 11
  • 人员报告在system32文件夹中有 5.82.7601.18837 comctl32.dll,在winsxs文件夹中有 6.10.7601.23039 comctl32.dll

(对于那些不知道的人的快速说明 - 因为 WinXP 两个版本都是默认发布的)

...

该可执行文件是在主题 Windows 10 上使用 XE4 构建的,并且至少可以运行(自己测试)

  • win10/32位
  • win10/64位
  • WinXP/32bit/经典-主题
  • HyperV-Virtual-Win7-SP1/32bit/classic-theme/16bitcolor

我的 TImagelist 设置为“cdDeviceDependent”(对应于 ILC_COLORDDB)

...

这是我使用资源浏览器从可执行文件中提取的清单:

...

去做

我在文档中注意到 ImageList_WriteEx 的状态是: “您不应该创建一个使用 ILC_COLOR32 的 ILP_DOWNLEVEL 标志编写的图像列表” ......

我不确定在使用“ILC_COLORDDB”作为值的 32 位颜色系统上编译时会发生什么?

我的想法是/是 ILP_DOWNLEVEL 可能会被忽略......因此在被5.x ComCtl32读取时更有可能失败?但是我一直无法在互联网上找到任何描述的此类案例,但是...

此外,我的可执行文件似乎适用于虚拟 Win7-SP1-32bit-16color-classic-themes 配置...

...

去做

发送调试工具以获取/确认comctl32.dll 上加载的实际版本

...

尝试过

我尝试将用户指向带有清单的旧版本,而没有 **compability 部分。那没有任何区别。

0 投票
0 回答
83 浏览

winapi - TVS_EX_FADEINOUTEXPANDOS 在树视图中无效

TVS_EX_FADEINOUTEXPANDOS扩展样式似乎对我的树视图没有任何影响。

文档说:

当鼠标移开或进入悬停在控件上的状态时,淡入或淡出扩展按钮。

我这样设置样式:

我在 Windows 10 上,应用程序显示为使用视觉样式。

难道我做错了什么?

0 投票
0 回答
249 浏览

winapi - 指定 TaskDialog 的宽度

我正在通过该TaskDialogIndirect功能使用任务对话框。

一切都按预期工作,只是对话框的宽度正好是我在结构cxWidth字段中指定的宽度的两倍TASKDIALOGCONFIG

相关代码:

文档说是对话单位的cxWidth宽度。

上面的代码对话框的宽度是 300 像素而不是 150 像素,这意味着一个水平对话框单元是 2,看起来非常小。

如果我想明确指定任务对话框的宽度,我应该如何进行?假设在这种情况下我不能依赖一个水平对话单元始终为 2 的事实。

0 投票
0 回答
165 浏览

c - Win api上ListView中的列过滤器

我正在做一些研究,我想知道如何使用纯 win32 api 在 ListView 中实现列过滤器。

像这样的东西:

在此处输入图像描述

我写了一个简单的测试代码,生成一个列表视图来显示 CSV 内容。

CSV 测试文件:

为了可以在列表视图标题中创建搜索字段,需要对代码进行哪些更改?

如何捕获标题中每个文本字段的事件?

0 投票
1 回答
105 浏览

visual-studio - CEdit 适用于 ComCtrl32 版本 5.82 但不适用于 6.10

我想将 MFC 项目移植到当前可用的资源。

我使用 Microsoft Visual Studio Community 进行开发。

在旧项目中,Windows SDK 版本是10.0.15063.0

在新项目中,Windows SDK 版本为10.0.17763.0

旧项目使用 ComCtrl32.dll 版本5.82

新项目使用 ComCtrl32.dll 版本6.10

使用SetWindowTextW(textp)更新后, 使用的CEdit控件显示黑色控件矩形

如果我将光标移到控件上,它看起来像预期的那样。

ValEdit.h:

ValEdit.cpp:

谢谢你的建议

尔希