创建一个“停靠”到屏幕一侧并在最大化时限制其他窗口大小的 .NET 应用程序

2023-11-29

我收到了来自上级的一个有趣的请求。他们想要一个简单的应用程序,可以在用户的​​计算机上显示多个时区的时间。这本身是微不足道的;一个带有计时器的简单窗口,它将获取当前 UTC 时间并将其转换为他们想要查看的任意数量的时区,以更新某些标签的文本。

不过,问题就在这里;为了满足各种要求,窗口永远不会被桌面上的任何其他东西遮挡或遮挡。用户将运行其他必须始终完全可见的应用程序,同时该应用程序不能被这些窗口之一覆盖。

因此,我正在考虑通过以下两种方式之一来实现它:

  • 作为一个始终位于顶部的应用程序,但背景将完全透明,时间显示将是 50% 透明或类似。将鼠标移到窗口上将通过删除其透明度和/或添加不透明的高对比度背景来“突出显示”时间显示。据我所知,这个解决方案不能使用Windows Aero,因为主要用户的操作系统是Windows XP。

  • 作为一个使用低级 Windows 消息以某种方式模仿 Windows 任务栏在“始终位于最前面”模式下的行为的应用程序;它将停靠在屏幕顶部,始终显示在“正常”状态窗口的顶部,此外还将控制其他窗口的“最大化”行为,以便这些窗口在最大化时不会与它重叠。

我真的不知道从哪里开始实现其中任何一个,但我大胆猜测,考虑到 WinXP 的限制,如果可能的话,第二个选项会更容易。那么,我需要实现哪些行为来告诉 Windows 永远不要在窗体顶部最大化?


作为墓志铭,由于 Hans Passant 似乎不愿发表答案,我发现我需要的是使应用程序成为“应用程序桌面工具栏”或 Appbar。 Hans 给出的 CodePlex 链接,http://codeproject.com/KB/dotnet/AppBar.aspx以及有关该主题的 MSDN 文章,http://msdn.microsoft.com/en-us/library/windows/desktop/cc144177%28v=vs.85%29.aspx,提供很多信息。我几乎能够将定义 AppBar 行为的 CodePlex 代码区域复制/粘贴到其他正常的 .NET 表单中,以创建一个简单的概念验证:

enter image description here

我对 CodePlex 代码所做的一个更改是,将 RegisterBar() 的一半(将表单注册为 AppBar)与拆除它的代码分开,因此对 RegisterBar() 的调用始终会执行此操作,而不是交替注册和取消- 注册它。

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

创建一个“停靠”到屏幕一侧并在最大化时限制其他窗口大小的 .NET 应用程序 的相关文章

  • 当我退出应用程序时,.mdf 文件中的数据丢失

    最近在研究SQL Server 2008 R2数据库 我创建数据库并在应用程序中附加同一数据库的 mdf 文件 其中包含一些默认数据 运行应用程序默认数据正常 现在我在我的应用程序中插入 更新一些数据并且它工作正常 但是 当我退出应用程序并
  • OpenCV 和 QT 之间的集成

    我对 QT 和 OpenCV 开发完全是新手 一般来说是 C 我想使用 OpenCV 开发一个应用程序并使用 Qt 创建其界面 我不明白的是 如何整合这两个部分 我的意思是 为了开发 java 我只使用 eclipse 它为我提供了 JFr
  • 在 Resharper 分析中忽略设计器和生成的文件

    我已经使用 Resharper 几天了 我真的很喜欢这个工具 但是有一件事让我很恼火 我想知道它是否可以改变 我从生成的代码中收到大量问题通知 我的项目中几乎有 1400 个 我想将这些文件设置为忽略 这样它们就不会像使用 StyleCop
  • 是否可以在不使用探查器的情况下跟踪 C# 应用程序中的内存使用情况?

    我想编写一个简单的应用程序来跟踪其当前的内存使用情况 创建的对象数量等 在 C 中 我通常会覆盖 new 运算符 但由于显而易见的原因 我无法在 C 中执行此操作 有没有办法在不使用分析器的情况下做到这一点 您可能想从垃圾收集器开始 MSD
  • 针对 .NET 3.5 和 Silverlight

    假设我已经有一个构建 NET 3 5 程序集的项目 现在我想为 Silverlight 构建这个程序集 并且进一步以最小的努力维护其 Silverlight 版本 什么是不可接受的 为 Silverlight 构建创建单独的项目 什么是可以
  • 使用 VS 2012 在构建中生成 T4

    我正在尝试使用 VS2012 在项目的每个构建上生成代码 我的解决方案中有 3 个项目 项目1有一些类 项目 2 有通用模板 项目 3 的模板读取 json 文件 然后调用项目 2 中的通用模板来生成其文件 当我单击 构建 转换所有 T4
  • 在列表框 WPF 中设置所选项目的边框

    如何在列表框中设置样式以获得所选项目周围的边框 最简单的方法是添加一个触发器IsSelected在 ItemContainerStyle 中ListBox
  • .NET 4.0 是否与 Windows XP SP2 或更低版本兼容? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我读过这里http www microsoft com downloads en details aspx FamilyID 5765
  • 来自网站但不来自控制台应用程序的 Web 服务调用中出现 EndpointNotFoundException

    我明白了EndpointNotFoundException在来自网站的 Web 服务调用上 而如果我从控制台应用程序执行此操作 则同样的调用也有效 以下是更详细的异常消息 Could not connect to https TCP err
  • Web API 帮助页面显示每个方法的两个版本

    如何避免帮助页面显示我的方法的两个版本 正如你所看到的 我已经设置了一条自定义路线 api property search finnId 但我不希望使用查询参数的那个出现在 帮助 页面中 有办法解决这个问题吗 我正在使用 ASP NET F
  • SQL LIKE 的 C# 版本

    有没有办法在 C 中搜索字符串中的模式 像 Sql LIKE 这样的东西会非常有用 正则表达式允许一切LIKE允许以及更多 但具有完全不同的语法 然而 由于规则LIKE是如此简单 其中 表示零个或多个字符 并且 表示一个字符 并且两者LIK
  • 在 ReflectionOnly 模式下将程序集加载到新的 AppDomain 时,方法没有实现

    在我们的应用程序 包含 65 个项目的解决方案 中 所有引用的程序集都会在运行时分析是否存在 Ninject 模块 也应用了一些过滤 这些模块稍后会加载到 Ninject 内核中 并且每个模块都会声明内核的绑定 我们采用了一个加载器 以仅反
  • 新的 SDK 项目在 Visual Studio 中缺少“启动外部命令”

    旧的 NET 项目在调试下有一个选项 允许 启动外部命令 如图所示 当我使用新的SDK样式创建新项目时 我看不到相同的选项 如下图 有办法拿回来吗 两张图片均取自同一个 VS 因此与版本无关 我发现的解决方法是正常运行程序并附加到它 但这并
  • protobuf-net 代码生成器

    我正在将 Google Proto Buffers 合并到我的项目中 Windows 的 protoc exe 生成用于序列化 反序列化的头文件和源文件的方式非常好 我需要 protobuf net 代码生成器 因此 例如 如果我有一个 P
  • 从 SynchronizationContext 派生

    简而言之 我实现了一个从 SynchronizationContext 派生的类 以便 GUI 应用程序可以轻松地使用 GUI 线程以外的线程上引发的事件 我非常感谢对我的实施提出评论 具体来说 有什么是您建议反对的或可能会导致我未预见到的
  • .NET 服务是否表现出线程敏捷性?

    与以下问题相关this https stackoverflow com questions 657735 how is asp net multithreaded and this https stackoverflow com quest
  • Web API 请求上的滑动会话

    UPDATE 看起来它正在尝试写入新的 cookie 标头ApplyResponseGrantAsync但不能因为它是抛出标头已发送的异常 UPDATE 更清楚 我如何获得Set Cookie在 Web API 请求期间添加到 XHR 响应
  • 在异步方法中使用时 HttpClient 标头被清空

    我正在使用 NET Framework 4 6 1 我的 Web api 中有一个控制器 其中有静态 HttpClient 来处理所有 http 请求 在 IIS 上托管我的应用程序后 大约每月一次 我的应用程序的所有传入请求都会出现以下异
  • 实体框架中的导航属性是什么

    我是实体框架的新手 当Visual Studio创建模型图时我们主要可以看到Entities Propertie和Navigation Properties这两个东西 那么这些Navigation Properties是什么 如何使用它们
  • 如何从另一个线程阻止 UI 线程或强制表单在 UI 线程内运行

    我的应用程序的一个要求是 如果它失去数据库连接 那么它必须弹出一个大模式 无连接 稍后重试 对话框 阻止所有用户交互 直到重新获得连接为止 我通过在应用程序启动时启动 DeviceMonitor 类的实例来实现此目的 该类创建一个 Syst

随机推荐