隐藏自定义应用程序窗口,但应在任务栏上显示应用程序图标(不是作为托盘图标)

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

本文关键字:应用程序 图标 托盘图标 显示 窗口 自定义 任务栏 隐藏      更新时间:2023-10-16

我需要创建一个示例Windows应用程序,其中应隐藏该应用程序,但是应用程序图标应在任务栏上(不是作为托盘图标)这个怎么做?还是可以这样做?当我使用ShowWindow(HWND,SW_HIDE)时,该应用程序被隐藏但在任务栏上看不到。所以我不能使用这个。我不想将其添加到Trayicon。请帮我做这个

当我使用ShowWindow(hwnd,sw_hide)时,该应用程序被隐藏但在任务栏上没有看到。所以我无法使用。

当您隐藏/显示窗口时,它也相应地隐藏/显示其任务栏按钮。任务栏上的窗口控制其任务栏按钮的可见性,以匹配其自身的可见性。没有选择防止这种行为。

要做您要问的事情,您将需要:

  1. 使用SW_MINIMIZE代替SW_HIDE,然后将您的窗口丢弃任何WM_SYSCOMMAND消息,将其wParam设置为SC_RESTORESC_MAXIMIZE

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

说,这两种方法都是错误的解决方案。

说这是客户端服务器方案。我不想在客户端上显示一些窗口。但是,任务栏上应该有一个图标,以了解客户端正在运行某些应用程序

您不应该使用任务栏只是为了向用户展示应用程序在没有可见窗口的情况下运行。这不是任务栏的目的。而是使用通知区域(通常称为"系统托盘")。这正是通知区域用于的场景。

我不想将其添加到Trayicon。

不管您想要什么,这就是您应该做的。这就是Microsoft期望您做的,以及用户也将期望的。

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

我不想混淆用户。

然后不要做用户没有想到的事情。自任务栏首次在Windows 95中引入以来,用户就已经习惯于仅在任务栏上看到可见的窗口,以及系统托盘中的状态图标。不要打破期望。并且不要违反Microsoft建立的UI指南。

  • 遵循用户界面指南

  • taskbar

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

  • 通知区域

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

:: movewindow(hwnd_mymainwnd,-5000,-5000,10,10,false);