如何从 C++ 更改 Windows 闪烁光标形状?

2024-02-03

如何将 Windows 闪烁光标形状从默认的垂直 ( | ) 更改为水平,如 dos 中使用的 ( _ )。

有没有一些好的功能可以解决这个问题?

OS: win7


这实际上被称为caret,而不是一个cursor。这可能就是混乱的根源,也是为什么寻找解决方案没有产生太多用处的原因。NullPonyPointer 的评论 https://stackoverflow.com/questions/13439717/how-to-change-windows-blink-cursor-shape-from-c#comment18373963_13439717也反映了这种常见的困惑。这SetCursor函数确实是您想要更改鼠标光标的函数,但更改插入符号不起作用。

幸运的是,有一整组 Windows 函数可以使用插入符:CreateCaret http://msdn.microsoft.com/en-us/library/windows/desktop/ms648399.aspx, ShowCaret http://msdn.microsoft.com/en-us/library/windows/desktop/ms648406.aspx, HideCaret http://msdn.microsoft.com/en-us/library/windows/desktop/ms648403.aspx, SetCaretPos http://msdn.microsoft.com/en-us/library/windows/desktop/ms648405.aspx, and DestroyCaret http://msdn.microsoft.com/en-us/library/windows/desktop/ms648400.aspx。还有其他一些用于操纵眨眼时间的方法,但我建议坚持用户当前的设置(这将是默认设置)。

首先,介绍一些背景知识。我强烈建议阅读两篇 MSDN 介绍性文章关于插入符 http://msdn.microsoft.com/en-us/library/windows/desktop/ms648397.aspx and on 使用插入符 http://msdn.microsoft.com/en-us/library/windows/desktop/ms648398.aspx。但这里有一个简单的总结:插入符号由窗口拥有;特别是当前具有焦点的窗口。该窗口可能类似于文本框控件。当窗口接收焦点时,它会创建一个插入符号以供使用,然后当它失去焦点时,它会销毁其插入符号。显然,如果您不手动执行任何操作,您将收到默认实现。

现在,示例代码。因为我喜欢糖果机界面,所以我将它包装在一个函数中:

bool CreateCustomCaret(HWND hWnd, int width, int height, int x, int y)
{
    // Create the caret for the control receiving the focus.
    if (!CreateCaret(hWnd,    /* handle to the window that will own the caret */
                     NULL,    /* create a solid caret using specified size    */
                     width,   /* width of caret, in logical units             */
                     height)) /* height of caret, in logical units            */
        return false;

    // Set the position of the caret in the window.
    if (!SetCaretPos(x, y))
        return false;

    // Show the caret. It will begin flashing automatically.
    if (!ShowCaret(hWnd))
        return false;

    return true;
}

然后,响应WM_SETFOCUS http://msdn.microsoft.com/en-us/library/windows/desktop/ms646283.aspx, EN_SETFOCUS http://msdn.microsoft.com/en-us/library/windows/desktop/bb761685.aspx,或类似的通知,我会打电话给CreateCustomCaret功能。并回应WM_KILLFOCUS http://msdn.microsoft.com/en-us/library/windows/desktop/ms646282.aspx, EN_KILLFOCUS http://msdn.microsoft.com/en-us/library/windows/desktop/bb761682.aspx,或其他类似的通知,我会打电话DestroyCaret().

或者,CreateCustomCaret可以从位图创建插入符号。我可能会提供以下重载:

bool CreateCustomCaret(HWND hWnd, HBITMAP hbmp, int x, int y)
{
    // Create the caret for the control receiving the focus.
    if (!CreateCaret(hWnd,   /* handle to the window that will own the caret   */
                     hBmp,   /* create a caret using specified bitmap          */
                     0, 0))  /* width and height parameters ignored for bitmap */
        return false;

    // Set the position of the caret in the window.
    if (!SetCaretPos(x, y))
        return false;

    // Show the caret. It will begin flashing automatically.
    if (!ShowCaret(hWnd))
        return false;

    return true;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 C++ 更改 Windows 闪烁光标形状? 的相关文章

  • 在 Windows 上通过 ctypes 将文件描述符传递给 C 库函数

    我试图通过 ctypes 将文件描述符传递给在 fd 上执行写入的 C 函数 在linux上它可以工作 在 Windows 上则不然 我不明白为什么 我没有 Windows 开发人员的经验 C func signature void fun
  • 重用 t-sql 游标的起始位置?

    我正在开发一个在临时表上使用游标的存储过程 我已经阅读了一些关于为什么不需要游标的内容 但在这种情况下我相信我仍然需要使用游标 在我的过程中 我需要遍历表的行两次 声明游标后 已经单步执行临时表并关闭游标 重新打开时游标的位置是否仍保留在表
  • Nexus 7 (2013) 和 Win 7 64 - 尽管检查了许多论坛和在线资源,仍无法安装 USB 驱动程序

    我正在尝试设置 Nexus 7 2013 进行调试 但我在安装 USB 驱动程序的步骤中陷入困境 到目前为止 这是我尝试过的 采取的步骤 在 Nexus 7 2013 上打开调试模式 连接设备至 PC 下载 Google USB 驱动程序于
  • Vagrant 错误:无法挂载 VirtualBox 共享文件夹(Guest Additions、vboxsf)

    问题 我在 Windows 10 上安装了 Vagrant 这样我就可以在虚拟机中创建个人本地开发环境 我读到的有关 Vagrant 的所有内容都表明我什至可以启动多个系统并通过 NAT 端口转发测试它们之间的通信 但首先 我只想在对其余部
  • MSI 安装程序,64 位操作系统,写入 \windows\system32\inetsrv 文件夹

    在 Windows Server 2008 64 位上 我需要一个 msi 安装程序文件来将一些文件写入 windows system32 inetsrv 文件夹 这些文件是一些 XML 架构验证文件 C XmlReaderSettings
  • 批处理文件:FOR 循环中的 GOTO

    我有一个带有 FOR 循环的批处理文件 在循环中 我必须等待进程结束 为此我使用了 IF 和 GOTO 问题是 GOTO 打破了循环 我尝试寻找其他解决方案 但没有找到任何东西 如何做呢 echo off for f tokens a in
  • 使用特定的 JRE 运行 JAR 文件

    在 Windows 上有没有办法使用位于特定文件夹中的 JRE 运行 JAR 文件 类似于 Eclipse 在您提供给它的某个路径中查找其 JRE 的方式 一些 Windows 可执行代码 C 或 C 或批处理文件都可以完成这项工作 谢谢
  • .NET 中安全身份的本地化

    我想在 NET 中实现一个用于服务 客户端通信的命名管道 并遇到了这段代码 http code msdn microsoft com windowsdesktop CSNamedPipeCommunication 33b2485c view
  • Java 7 默认语言环境

    我刚刚安装了 jre7 我很惊讶地发现我的默认区域设置现在是 en US 对于jre6 它是de CH 与jre7有什么不同 默认区域设置不再是操作系统之一吗 顺便说一句 我使用的是Windows7 谢谢你的回答 编辑 我已经看到了语言环境
  • 在 Windows 下克隆 git repo 时,出现“错误:无法创建文件 <文件>...(是目录)”

    Z gt git clone git github com kennethreitz httpbin git Cloning into httpbin remote Counting objects 1073 done remote Com
  • Chromium 中的 MP4 编解码器支持

    我们已将 Chromium 嵌入式框架集成到我们的 Windows 游戏中 以允许我们从应用程序内渲染网页 并且一切正常 除了 MP4 视频 据我所知 由于许可问题 Chromium 不包含此编解码器 但任何人都可以提供有关我们如何添加支持
  • 将键码转换为相关的显示字符

    在 C Windows Forms 项目中 我有一个不提供 KeyPressed 事件的控件 它是一个 COM 控件 ESRI 映射 它仅提供 KeyUp 和 KeyDown 事件 包含关键事件参数 http msdn microsoft
  • 无法在 Windows 10 上运行 Python 3.7“权限被拒绝”

    当尝试使用 Git Bash 在 Windows 10 上运行 Python 3 7 时 出现以下错误 python version bash c Users Name AppData Local Microsoft WindowsApps
  • 如何在 Windows 上应用差异补丁?

    有很多程序可以创建差异补丁 但我在尝试应用一个程序时遇到了很大的困难 我正在尝试分发补丁 但用户向我询问了如何应用该补丁 于是我尝试自己弄清楚 结果发现我毫无头绪 而且我能找到的大多数工具都是命令行的 我可以处理命令行 但是如果没有一个漂亮
  • 如何确保密钥是在 TPM 内部创建的?

    我需要 在客户端计算机上运行 exe 这将在 TPM 中创建密钥对 然后我将使用 TPM 生成的密钥对的公钥部分创建 CSR 我关心的是如何确保密钥是在 TPM 内部创建的 而不是由欺骗的 TPM 创建的 这将使私钥能够被迁移和复制 我听说
  • Web 应用程序的带宽和流量模拟器?

    您能否建议如何创建一个测试环境来模拟 Web 应用程序中的各种类型的带宽和流量 或者也许是一个针对本地主机执行此操作的开源程序 我认为在编写网络应用程序时这是一个非常重要的主题 但这不是一个常见的主题 我能想象创建这种环境的唯一方法是在本地
  • fopen_s 怎么会比 fopen 更安全呢?

    我正在处理遗留代码Windows平台 当我编译代码时VS2013 它给出以下警告 错误 C4996 fopen 该函数或变量可能不安全 考虑使用fopen s反而 要禁用弃用 请使用 CRT SECURE NO WARNINGS 详情请参见
  • Go 编译器有窗口化设置选项吗?

    我正在使用 Go 6g 编译 GTK 应用程序 我想知道是否有编译器 链接器选项使其成为 Windows 可执行文件而不是控制台可执行文件 MinGW 有一个 mwindows 选项来实现此目的 目前我必须使用十六进制编辑器手动更改 PE
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死

随机推荐

  • 复杂数据的曲线拟合

    我想用共享相同参数的两个函数来拟合复杂的数据集 为此我使用了 def funcReal x a b c d return np real a 1j b np exp 1j k x kappa1 x np exp kappa2 x c 1j
  • python 映射函数迭代

    results 是一个嵌套列表 如下所示 gt gt gt results 1 2 3 a b 1 2 3 c d 4 5 6 a b 4 5 6 c d pr 是一个函数 其定义如下 gt gt gt def pr line print
  • 实体框架 - 在更新时保存子实体

    我有一个发票实体 它有子发票日志实体 当我第一次创建发票并添加其 InvoiceLog 实体并保存时 它工作正常 但是 如果我随后编辑发票并尝试添加其他 InvoiceLog 实体 它会完全忽略新的 InvoiceLog 实体并且根本不保存
  • 有一些常见的方法来写入和读取配置文件吗?

    我需要我的程序创建和编辑一个配置文件 其中包含有关对象集的信息 然后在每次执行时读取它 是否有某种我可以使用的配置样式指南 我在 Windows 上使用 C 我建议查看提升 属性树 http www boost org doc libs 1
  • 我应该如何处理 kvo 中的 NSIndexSet 来更新表视图?

    我开始使用键值观察 并且我正在观察的可变数组在更改字典中为我提供了 NSIndexSets 有序可变对多 据我所知 问题是表视图希望我给它充满索引的 NSArrays 我考虑过实现一种自定义方法来将一个方法转换为另一个方法 但这似乎很慢 而
  • 减少 begin() 迭代器,然后再次增加

    这些陈述按照标准有效吗 std string str 123 auto it str begin it it Does it point to character 1 now 我在 g 4 7 2 和 clang 3 5 上尝试过这个 it
  • 是否可以在 Pydantic 中将未知字段更改为驼峰命名法?

    我定义了一个 Pydantic 模式 它接受未知字段 如下所示 from stringcase import camelcase from pydantic import BaseModel as pydanticBaseModel cla
  • Lightgbm 中“is_unbalance”参数的使用

    I am trying to use the is unbalance parameter in my model training for a binary classification problem where the positiv
  • 需要java API来解析SQL语句[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要一个java API来解析SQL语句 例如 我有一个 SQL 查询 SELECT PRODUCTS PROD ID PRODUCTS
  • 在SQL Server中创建用户后无法登录

    我的问题是创建用户后无法登录 SQL Server 用户创建成功 因为新用户列在安全 登录下 怎么解决这个问题 用户 sims 登录失败 该用户未与某个关联 受信任的 SQL Server 连接 微软 SQL Server 错误 18452
  • 如何创建动态路径组件并结合重试直到

    我有一个用例 我需要首先调用 API 来获取 ID 列表 从该响应中选择一个随机 ID 接下来 我调用第二个 API 它使用随机 ID 作为路径中的组件 第二个 API 调用可能会返回空响 应 因此我想利用retry until但在每次重试
  • 使用另一个 pandas DataFrame 更新存储在 Pytable 中的 pandas DataFrame

    我正在尝试创建一个函数 用 pandas DataFrame 中的新数据更新我存储在 PyTable 中的 pandas DataFrame 我想检查 PyTable 中是否缺少特定 DatetimeIndexes 的某些数据 值为 NaN
  • 用户警告:无法导入 lzma 模块。你安装的Python不完整

    安装 Google Cloud Bigquery 模块后 如果我将该模块导入 python 代码 我看到这条警告消息 在 python 3 7 3 Virtualenv 中发生在我身上 尝试重新安装 GCP bigquery 模块 如果我们
  • 使用imageview显示google play游戏服务玩家图像

    我正在使用 Google Play 游戏服务 并使用此代码来获取玩家详细信息 if gamesClient null Games Leaderboards loadCurrentPlayerLeaderboardScore gamesCli
  • 在 IntelliJ 和 Eclipse 开发人员都在工作的项目中使用 @NotNull

    IntelliJ IDEA 的一位同事 从事另一个项目 向我展示了令人惊叹的 NotNull 注释 我在这里读过有关如何开始在各处添加 NotNull 的消息 节省了大量时间和麻烦 IntelliJ 10 甚至可以在检测到该情况时自动将 N
  • 如何创建通用 JsonDeserializer

    我需要创建一个通用解串器 换句话说 我不知道反序列化的目标类是什么 我在互联网上看到过一些例子 他们创建了一个反序列化器 例如JsonDeserializer
  • 如何使用 Django 创建三重联接表

    使用 Django 的内置模型 如何在三个模型之间创建三重连接 例如 用户 角色和事件是模型 用户有很多角色 角色有很多用户 多对多 事件有许多用户 用户也有许多事件 多对多 但对于任何给定的事件 任何用户可能只有一个角色 如何在模型中表示
  • 必需的字段验证在 JQuery Popup MVC 4 中不起作用

    我有 JQuery 弹出窗口 我想在其上放置必需的字段验证 为此 我在模型中设置了必需的属性 并在视图中为它们设置了验证消息 但所需的字段验证不适用于弹出窗口 必需的字段验证在 JQuery 弹出窗口以外的表单上运行良好 请指导我应该如何解
  • Google 计算引擎 (GCE) 电子邮件传送解决方案?

    我刚刚在 Google Compute Engine 上设置了几个实例 但由于 GCE 阻止了端口 25 465 和 587 上的出站连接 因此电子邮件发送系统出现了问题 GCE 提 供详细解决方案 https developers goo
  • 如何从 C++ 更改 Windows 闪烁光标形状?

    如何将 Windows 闪烁光标形状从默认的垂直 更改为水平 如 dos 中使用的 有没有一些好的功能可以解决这个问题 OS win7 这实际上被称为caret 而不是一个cursor 这可能就是混乱的根源 也是为什么寻找解决方案没有产生太