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

时间:2017-03-15 06:20:14

标签: c++ windows winapi mfc win32gui

我需要创建一个示例窗口应用程序,其中应该隐藏应用程序,但应用程序图标应该位于任务栏上(而不是托盘图标) 这该怎么做?还是可以这样做? 当我使用ShowWindow(hWnd,SW_HIDE)时,应用程序被隐藏但在任务栏上看不到。所以我无法使用它。我不想将它添加到trayicon。 请帮我这样做

1 个答案:

答案 0 :(得分:0)

  

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

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

要做你想要的,你需要:

  1. 使用SW_MINIMIZE代替SW_HIDE,然后让您的窗口丢弃已将WM_SYSCOMMAND设置为wParam的任何SC_RESTORE条消息}或SC_MAXIMIZE

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

  3. 话虽如此,任何一种方法都是错误的解决方案。

      

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

    您不应仅仅使用任务栏向用户显示应用程序正在运行而没有可见窗口。这不是任务栏的意思。请改用通知区域(通常称为"系统托盘")。这正是通知区域的用途。

      

    我不想将它添加到trayicon。

    无论您想要什么,这都是您应该做的事情。这就是微软期望你做的事情,以及用户期望的事情。

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

      

    我不想让用户感到困惑。

    然后不要做用户不期望的事情。自从Windows 95中首次引入任务栏以来,用户已经习惯于只在任务栏上看到可见窗口,并且系统托盘中的状态图标也是如此。不要打破这种期望。并且不要违反微软建立的用户界面指南。

    • Following User Interface Guidelines

    • Taskbar

        

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

    • Notification Area

        

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