繁体   English   中英

隐藏自定义应用程序 window 但它应该在任务栏上显示应用程序图标(而不是托盘图标)

[英]Hide the custom applicaion window but it should show the application icon on the taskbar(not as a tray icon)

我需要创建一个示例 windows 应用程序,该应用程序应该被隐藏,但应用程序图标应该在任务栏上(而不是作为托盘图标)如何做到这一点? 或者有可能这样做吗? 当我使用 ShowWindow(hWnd, SW_HIDE) 时,应用程序被隐藏但在任务栏上看不到。 所以我不能用这个。 我不想将它添加到 trayicon。 请帮我做这个

当我使用 ShowWindow(hWnd, SW_HIDE) 时,应用程序被隐藏但在任务栏上看不到。 所以我不能用这个。

当您隐藏/显示 window 时,它也会相应地隐藏/显示其任务栏按钮。 任务栏上的 window 控制其任务栏按钮的可见性以匹配其自身的可见性。 没有阻止该行为的选项。

要执行您要求的操作,您需要:

  1. 使用SW_MINIMIZE而不是SW_HIDE ,然后让您的 window 丢弃任何WM_SYSCOMMAND消息是接收到的wParam设置为SC_RESTORESC_MAXIMIZE

  2. 创建一个单独的 window 只是为了管理任务栏按钮。 不要隐藏 window,但您可以使用 0x0 尺寸创建它,或将其移出屏幕。 只要知道用户在任务栏按钮上执行的任何活动都会反映在这个单独的 window 上,因此您必须根据需要将任何用户操作委托给您的真实 window。 此外,为了支持任务栏上的实时预览和 Alt-Tab/Flip3D 对话框,您必须处理WM_DWMSENDICONICLIVEPREVIEWBITMAPWM_DWMSENDICONICTHUMBNAIL消息,在请求时将您的真实 window 呈现为内存中的 BMP。

话虽如此,这两种方法都是错误的解决方案。

假设这是一个客户端-服务器场景。 我不想在客户端显示一些 window。 但是任务栏上应该有一个图标,让客户端知道某个应用程序正在运行

您不应该使用任务栏只是为了向用户显示应用程序正在运行而没有可见的 window。这不是任务栏的用途。 请改用通知区域(通常称为“系统托盘”)。 这正是通知区域适用的场景。

我不想将它添加到 trayicon。

不管你想要什么,这都是你应该做的。 这是 Microsoft 期望您做的,也是用户期望的。

您可以在应用程序运行时在通知区域显示状态图标,如果用户需要更多详细信息,那么当用户单击和/或将鼠标悬停在图标上时,您应该显示 window。

我不想混淆用户。

然后不要做用户不期望的事情。 自从 Windows 95 首次引入任务栏以来,用户已经习惯于在任务栏上只看到可见的 windows,在系统托盘中看到状态图标。 不要打破这种期望。 并且不要违反 Microsoft 制定的 UI 准则。

  • 遵循用户界面指南

  • 任务栏

    通常在没有桌面存在的情况下运行的程序应该使用其通知区域图标来代替,即使它可能并不总是可见。

  • 通知区

    通知区域是任务栏的一部分,为通知和状态提供临时来源。 它还可用于显示桌面上没有的系统和程序功能的图标。

::MoveWindow(hwnd_MyMainWnd, -5000, -5000, 10, 10, FALSE);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM