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

windows - 如何在 TaskDialog 中设置默认按钮?

我在 win32 应用程序中使用 TaskDialog API。我创建了一个带有“是/否”按钮的任务对话框,但我找不到任何将“否”按钮设置为默认值的选项。YES 按钮始终是默认设置。请让我知道是否有办法将 NO 按钮设置为默认值。我知道 TaskDialogIndirect 支持默认按钮选项,但它对我正在尝试做的事情来说有点过头了。我只想要一个简单的“是/否”对话框,默认为“否”按钮。我不想使用 MessageBox API,因为我不想要标题栏中的关闭按钮。

谢谢,

阿比奈

0 投票
1 回答
2301 浏览

winapi - 如何子类化 win32 控件并保持与旧版本 comctl32.dll 的兼容性?

6.0 版的通用控件 (comctl32.dll) 实现了一种新方法,用于子类化控件,这在旧版本的 Windows 上不可用。实现子类化以便它在支持任一版本的通用控件库的系统上工作的最佳方法是什么?

0 投票
2 回答
360 浏览

c# - 仅在 DragDrop 上发生异常

我有一个 WinForms 应用程序,它使用了一个TaskDialog 库,该库利用 ComCtl32.dll 中的 Vista 样式对话框,对于较小的操作系统,它使用模拟的 win 表单......

但这不是问题......这个库工作正常,我们从来没有遇到过问题。到现在为止......事实上,如果我们在正常情况下启动一个对话框,那么它看起来很好。

但是,我在主窗体上添加了一个拖放处理程序,以捕获从其他来源(例如 Windows 资源管理器)删除的文件路径。如果该拖放处理程序是第一次显示对话框,那么我们会得到以下异常:

在 DLL“ComCtl32”中找不到名为“TaskDialogIndirect”的入口点。

这发生在第三方库调用:

如果已显示对话框,则处理程序将运行正常。

表单的 DragDrop 处理程序没有显示InvokeRequired,但我还是小心翼翼地通过引发对话框Form.Invoke

作为一个方面:我在 64 位 Windows 7 机器上编译(并运行)它,但带有“AnyCPU”架构标志。

TaskDialogIndirect关于为什么仅在第一次调用是通过 DragDrop 处理程序时才引发异常的任何想法/解决方案???

0 投票
0 回答
163 浏览

vsto - VSTO 加载项和 comctl32.dll

我正在使用 VSTO 4.0 和 .NET 4.0 开发 Word 和 Excel 2010 加载项。该插件集成了我们用 MFC 编写的胖客户端的一些功能。当我从加载项调用它们时,使用 Win2k 样式的 MFC 对话框(在胖客户端中它们看起来很正常)。在加载的库列表中有两个版本的 comctl32.dll:5.82 和 6.10。如何让 Word 和 Excel 使用正确版本的 comctl32.dll?我试图修改清单 Excel - 它有帮助,但这种方法不适合我。

0 投票
1 回答
610 浏览

vb6 - 我可以将 ActiveX 控件添加到 Comctlib.Toolbar (mscomctl) 控件吗?

$大家好,

我正在向 VB6 应用程序添加功能(是的,我知道,这是一项了不起的任务:P),我需要将 ActiveX 控件(它看起来像一个按钮,但做更多的事情)放入 comctlib(Microsoft 公共控件)工具栏。

这可能吗?我不介意使用 Winapi、互操作或任何需要的东西,因为我真的需要这个功能。如果 Comctlib 控件无法做到这一点,是否还有另一个用于 VB6 的工具栏控件,我可以在其中删除其他 ActiveX 控件?

提前感谢您帮助我使用这种过时的技术。

0 投票
2 回答
1209 浏览

winapi - 从 Windows RT 中的桌面应用程序加载“comctl32.dll”失败

使用http://forum.xda-developers.com/showthread.php?t=1944675中描述的方法,我使用 Windows RT 在我的表面上执行了一个 win32 桌面应用程序。

可以使用LoadLibrary加载诸如user32.dll、kernel32.dll、gdi32.dll等windows dll 。但是当我尝试使用LoadLibrary加载“comctl32.dll”“c​​omdlg32.dll”时,它返回NULL。

GetLastError()返回的错误代码是1114。这意味着“动态链接库 (DLL) 初始化例程失败。”

编辑:当我测试为 x86 编译的应用程序时,它可以正常工作。当我为 ARM 构建它并在 Windows RT 下运行时,发生了这个错误。

示例代码:

0 投票
1 回答
1512 浏览

delphi - Delphi TMonthCalendar - 停止自动滚动,我在几月?

将 TMonthCalendar 控件拖放到窗体上。设置为显示一个月。使用美国英语语言环境(星期日作为一周的第一天)。查看 2013 年 1 月。您的日历实际上显示 2012 年 12 月 30 日至 2013 年 2 月 9 日,因为它显示总共 42 天。将您的 MaxSelCount 设置为 42 并将 MultiSelect 设置为 true,以便您可以选择这些天数。

问题 1 - 单击 12 月 31 日,并按住鼠标。拖到 1 月 1 日,然后放开。您选择了两天。按预期工作。通过选择一月份的另一个日期来清除此选择。现在再次选择相同的两天,但这次选择 1 月 1 日 FIRST,然后向左拖动以突出显示 12 月 31 日。注意日历是如何向左滚动到 12 月的?如何阻止日历滚动???

问题 2 - 在上述两种情况下,您选择了相同的两个日期,但显示的日历月份完全不同。如何判断日历实际显示的月份?

第 3 期 - 选择 1 月 24 日至 2 月 1 日。日历现在滚动到 2 月,然后将 24 日、25 日和 26 日从视图中删除。似乎完全崩溃了。

我还尝试过作为包装器的 Jedi 控件。

0 投票
1 回答
308 浏览

c - 强制使用 ANSI 编辑控件而不是 comctl32 编辑控件

我构建了一个模块,该模块创建一个带有来自 windows 的 EDIT 窗口类的编辑框的窗口。它被设计为仅使用 ansi 字符集而不使用任何 unicode。

我使用EM_GETHANDLE来接收编辑控件的缓冲区。

现在这是我的问题:(引自上面的链接)

Note For Comctl32.dll version 6, the buffer always contains an array of WCHARs, regardless of whether an ANSI or Unicode function created the edit control. For more information on DLL versions, see Common Control Versions.

因此,当我的模块被已初始化 comctl32 的应用程序加载时,我的整个代码都会中断。

我的问题:有没有办法阻止 CreateWindowA 使用 comclt32 或者有没有人有解决这个问题的想法?

0 投票
1 回答
301 浏览

c# - 当复选框控件的 Visible 变为 true 时,comctl32.dll 使用过多的内存

我在 C# .NET 应用程序的运行时向 Windows 窗体添加控件。这些控件中的每一个都与特定信号交互并使用来自该信号的一些数据——信号名称、描述、来源、单位、值等。

这些控件上有一个复选框。当其中一个信号的复选框的 Visible 属性变为 true 时,我的应用程序的已提交内存将超过 800MB。其他数百个信号都没有问题。

我使用 DebugDiag 工具得知 comctl32.dll 正在分配 805.45 MBytes。尤其:

  • 函数 comctl32_72380000!CCHeapAllocArraySize+3a
  • 分配类型 堆分配
  • 堆句柄 0xf37893cd
  • 分配计数 1 个分配
  • 分配大小 803.20 MB
  • 泄漏概率 16%

我的下一个故障排除步骤应该是什么?哪些工具可以提供帮助?

更新: 我将问题跟踪到父控件上的 System.Windows.Forms.TrackBar。轨迹栏的最大值超过 200,000,000。当我将最大值降低到 100,000,000 时,它使用了大约一半的内存。将最大值设置为 1,000,000 左右会使用更合理的内存量。

0 投票
1 回答
381 浏览

c#-4.0 - PinvokeStackImbalance 使用 CallingConvention.Cdecl 调用 comctl32

我们刚刚将我们的项目从 .NET 3.5SP1 升级到 .NET 4.5,现在我们在从 comctl32 调用 DllGetVersion 时获得了 PInvokeStackImbalance MDA。我已经阅读并了解到框架在默认情况下不再能够适应不正确的调用约定。奇怪的是,我们已经指定了 CallingConvention.Cdecl,我认为这是正确的。如果我完全删除 CallingConvention 属性并让它成为默认值 (CallingConvention.WinAPI),我们不会得到 PInvokeStackImbalance。任何人都可以对此有所了解吗?操作系统是 Win 7 64 位,如果有任何区别,它是一个 32 位应用程序。我试过查看 DllGetVersion 函数的头文件,但我不知道调用约定应该是什么。