问题标签 [common-controls]

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 回答
68 浏览

c++ - 允许在热键控制中输入

我正在使用标准热键控件来允许用户为某个操作指定组合键。但是,它不允许使用 Return (Enter) 键。有没有办法允许它?我的操作是一种聊天回复,因此使用 Alt+Enter 之类的热键是最有意义的。

0 投票
2 回答
1057 浏览

visual-c++ - 如何获取 CTreeCtrl 的更新主题

我有一个使用 CTreeCtrl 的 C++ MFC 应用程序,我正在运行 Windows 7 和 Visual Studio 2008。我试图让我的树控件具有展开/折叠按钮的箭头,而不是 +/-

我正在寻找的一个很好的例子是您在 Visual Studio 中编辑项目属性时看到的树控件。

无论何种风格或尝试修改主题,我仍然拥有旧的 xp 风格 +/-

我觉得我错过了一些简单的东西,任何帮助将不胜感激。

0 投票
1 回答
1101 浏览

c++ - 在另一个进程中从 SysHeader32 控件获取列名

我正在制作一个程序 (program1),它将读取位于另一个程序 (program2) 的报告样式列表 (SysListView32) 中的标题 (SysHeader32) 的列名称。

所以基本上我希望我的程序进入另一个程序并读取我找到的所有标题(SysHeader32)的标题名称。由于程序有很多不同的列表和每个列表的标题,我决定使用EnumChildWindows带有EnumChildProc回调函数的函数来查看子窗口的所有句柄。使用这些句柄GetClassName()来查看类名是什么,当我看到它是 SysHeader32 时,我知道我找到了一个可以包含各种标题名称的标题......但我不知道我可以使用什么代码来获取文本从这些不同的标题中,我也不知道如何识别每个标题......

这是我到目前为止找到的每个 SysHeader32 标头的句柄的代码:

问题 1:: 如何检查标题中有多少不同的标题/项目?

问题 2:: 如何获取标题中找到的每个标题/项目的文本?

请提供一些示例代码。

0 投票
1 回答
1187 浏览

ms-access - 是否可以在 Microsoft TreeView Control 6.0 (MSComctlLib.TreeCtrl.2) 中模拟三态复选框?

我在 Microsoft Access 中使用 Microsoft TreeView Control 6.0。它似乎工作得很好,只是它似乎没有灰色状态,表明检查了一些,但不是所有的子节点。

我已经研究过使用自己的图像来模拟复选框,但如果我这样做,我必须删除真正的复选框,否则看起来我每个项目都有两个复选框......但是我没有任何复选框,我不知道如何处理对图像的点击。

我可以找到很多人在其他语言/使用中对此控件有相同的问题,但我找不到 Microsoft Access 的解决方案。

如果有其他可用的东西可以给我一个带有三态复选框的层次结构,我会很高兴转移到不同的控件。

0 投票
0 回答
1708 浏览

c++ - Direct2D 和 Windows 常用控件

我对 Direct2D 还是有点陌生​​,所以这可能是一个愚蠢的问题。

我希望我的应用程序的 UI 支持部分透明和硬件加速等功能。要做到适当的透明度,我需要使用UpdateLayeredWindow API,它需要源设备上下文。所以我使用 Direct2D 创建一个ID2D1DCRenderTarget并简单地绘制到它。到目前为止一切顺利,它似乎工作得很好。

现在,我想在此设置中使用一些常用控件。使用普通的 Direct2D 绘图功能重新创建一个简单的按钮会相对容易,但像编辑控件这样的操作需要更多的工作。特别是当您想要执行用户期望从编辑控件中进行的常规文本处理时。所以我想为此使用现有的 Windows 功能。

通过阅读 MSDN,可以通过发送WM_PRINT消息获得通用控件以将自身绘制到设备上下文中。但是,我怎么知道何时发送此消息?当然,当用户输入编辑控件时,我可以从编辑控件中获得通知,但是我仍然需要弄清楚何时应该绘制闪烁的光标,例如。

这通常是怎么做的?我有哪些选择?在此先感谢您的任何指点。

0 投票
0 回答
245 浏览

c++ - Windows 常见控制错误?

最近我遇到了具有 BS_MULTILINE 样式的 Windows“按钮”控件的非常奇怪的行为,这看起来像 Windows 中的错误。要重现它,请执行以下操作:

(1) 使用 Visual Studio 2012 Project Wizard 创建新项目;选择“MFC 应用程序”;
(2) 在“应用程序类型”页面选择“基于对话框”+“MFC 标准”;
(3) 在“高级功能”页面只保留“通用控制清单”;
(4) 在生成的“Resource.h”文件中添加一行#define IDC_LONG_TEXT 103
(5) 在生成的 <project-name>.rc 文件中,将主对话框定义中的“TODO”静态文本替换为以下行:

(6) 在生成的<project-name>Dlg.cpp文件中,在OnInitDialog()handler中,在“TODO”注释行后面添加如下代码:

(7) 编译并运行程序。您将看到按钮文本绘制在按钮的右上角。如果您在上面的代码中注释最后一行,文本将被正确绘制。

有人面临同样的问题吗?它真的是一个错误吗?如果可以,如何提交给微软?

0 投票
3 回答
1660 浏览

visual-c++ - 带有颜色的进度条和带有公共控件的边框

我的 GUI 中有我喜欢的彩色进度条:

原来的

但是,我希望 GUI 在 Windows 7 上看起来像 Windows 7 风格,所以我添加了这个 pragma

但这导致了我不喜欢的单色(绿色)动画发光工具栏:

发光的

所以我通过输入删除了样式:

结果还不错:

无边界

但是,请注意,尽管我依赖于相同的资源文件,但进度条周围没有边框。如何将进度条设置为原始外观,同时保留 Windows 7 对窗口其余部分的外观?

0 投票
3 回答
1846 浏览

c++ - 为什么在显示列表视图图标时会出现黑色背景?

我不确定当我向 CListCtrl(或列表视图控件)添加图标时为什么会出现这个黑色轮廓?

在此处输入图像描述

我这样加载它:

然后我这样创建我的图像列表:

首先准备列表视图:

并且图标显示在列表的子项中,如下所示:

那么我做错了什么?

PS。我在我的 Windows 8.1 上使用 32 位 trucolor 显示设置运行了这个测试。

图标本身虽然是 256 色图像,因为我认为没有任何理由在具有 alpha 通道的 32 位图标上浪费空间,以实现如此小的尺寸和简单的设计:

在此处输入图像描述

0 投票
3 回答
3378 浏览

winapi - 一劳永逸:如何在 Windows API 中获得完全透明的复选框、按钮、单选按钮等,而不是黑色背景?

首先,对不起,如果我在这里听起来傲慢/粗鲁。

好的,所以现在每个人都遇到了这个(我希望);我只是在任何地方都没有找到任何适当的答案。我们从 Common Controls 6 清单开始,然后

并给出我们的标签WS_EX_TRANSPARENT。它们变得透明;到目前为止,一切都很好。现在我们必须将该样式添加到我们的复选框中(因为复选框响应该样式而不是WM_CTLCOLORBTN出于某种原因)。而且...复选框变黑了!

有没有办法让它们完全透明而不诉诸所有者绘制?我宁愿自己不画复选框;我宁愿不必猜测它看起来是否正确,或者如果主题 API 在我身上失败,我将不得不自己绘制复选框(当我将自定义复选框添加到我的列表视图时,我将不得不自己绘制复选框)而且我已经对所涉及的猜测数量不满意)。

这些复选框被绘制在主题选项卡控件上。到目前为止,我在 Windows XP 中发现了五个对话框,主题选项卡上带有透明复选框:快捷方式属性的常规选项卡、任务栏和开始菜单属性的任务栏选项卡、系统属性的系统还原选项卡、文件夹选项的常规选项卡(单选按钮)和辅助功能选项的键盘选项卡。所以这肯定是可能的!我确信 Windows UI 作者不必在整个操作系统中使用自定义绘图...我们都缺少什么?

如果我需要子类,那很好(无论如何我已经有一个子类用于事件处理目的),但我仍然不想自己画。

作为奖励,按钮呢?覆盖WM_CTLCOLORBTN给按钮一个黑色边框,但我注意到上面提到的标准对话框都没有让按钮的角透明,所以嗯:/

谢谢!

0 投票
1 回答
671 浏览

c++ - Windows TreeView 通用控件通知和多字节字符集的问题

在使用 C++ 编写的 Windows 应用程序中并通过 Windows API(没有 MFC 或其他!)使用 TreeView 公共控件时遇到了一个奇怪的问题:仅发送两个重要通知 TVN_ITEMCHANGED 和 TVN_ITEMCHANGING(从 Windows Vista 开始可用)如果加载了 ComCtl32.dll 的 6.0 版(通过清单说服链接器这样做)并且如果使用了 Unicode 字符集。使用多字节字符集会导致上述两个通知消失。使用 Unicode 和 5.82 版的 ComCtl32.dll 会产生相同的结果。顺便说一下,我使用的是 Windows 7 x64 和 Visual Studio 2010。

下面,您会找到一个“最小”(> 180 行代码:/)工作示例。使用 Unicode 字符集(Configuration Properties > General > Character Set)在 Visual Studio 2010 下构建可使程序按预期工作,但使用多字节字符集会使 TVN_ITEMCHANGED 和 TVN_ITEMCHANGING 消失。其他通知无论如何都会到达。

我是否忽略了某些东西,或者我是否在 Common Controls 实现中遇到了错误?我真诚地希望这是我以前的猜测,非常感谢您对此事的回答和想法!

最好的问候, D.费尔德曼