65.9K
CodeProject 正在变化。 阅读更多。
Home

如何隐藏任务栏中的窗口

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.80/5 (22投票s)

2004 年 4 月 17 日

1分钟阅读

viewsIcon

133401

本文档解释了如何在窗口仍然处于活动状态时,隐藏任务栏中的窗口名称。

引言

有时我们可能希望创建一个不需要任务栏中烦人框的应用程序。希望这个代码片段能帮到你。

步骤

  1. 全局声明

    以下是关于所用接口的一些简短说明

    • DECLARE_INTERFACE(iface) 用于声明一个**不**从基接口派生的接口。
    • DECLARE_INTERFACE_(iface, baseiface) 用于声明一个**从**基接口派生的接口。这是所使用的那个。并且该接口将从 IUnknown 接口派生。

    然后,让我们为派生的接口创建一个别名定义。

    DECLARE_INTERFACE_(ITaskbarList,IUnknown)
    {
    STDMETHOD(QueryInterface)(THIS_ REFIID riid,LPVOID* ppvObj) PURE;
    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    STDMETHOD_(ULONG,Release)(THIS) PURE;
    STDMETHOD(ActiveTab)(HWND) PURE;
    STDMETHOD(AddTab)(HWND) PURE;
    STDMETHOD(DeleteTab)(HWND) PURE;
    STDMETHOD(HrInit)(HWND) PURE;
    };
    //alias
    typedef ITaskbarList *LPITaskbarList;
  2. 在基于对话框的类声明中

    这取决于你,你是否希望将 pTaskbar 声明为对话框类的一个属性。实际上,这没有问题,因为实现(下一步)只需要窗口句柄 (HWND)。

    class CMyDlg : public CDialog
    {
    .
    .
    //Init our Taskbar handler
    LPITaskbarList pTaskbar;
    .
    .
    }

    不要忘记在对话框类的构造方法中将 pTaskbar 设置为 NULL

  3. 初始化
    BOOL CMyDlg::OnInitDialog()
    {
    .
    .
    //initializes the Component Object Model(COM)
    CoInitialize(0);
    //We call below function since we only need to create one object
    CoCreateInstance(CLSID_TaskbarList,0, 
      CLSCTX_INPROC_SERVER,IID_ITaskbarList,(void**)&pTaskbar);
    //Below function will initialize the taskbar list object
    pTaskbar->HrInit(this);
    .
    .
    .
    }
  4. 实现

    这是你可以用来隐藏任务栏中的“框”的函数。

    void CMyDlg::DeleteTaskbar()
    {
    //Hide it
    pTaskbar->DeleteTab(this);
    }

尝试 pTaskbar 的其他方法,你将会体验到一些东西。

如果本文档没有解释很多,请原谅我。我的目的是仅仅提供另一种替代方案。因为这种“方法”还没有被发布过。

© . All rights reserved.