对话框的单独任务栏按钮

Separate taskbar button for dialog

我支持基于 WinAPI/ATL 的应用程序,其中包含许多根据用户操作创建的对话框 windows。大多数对话框都是无主的 windows。如果同时创建多个对话框,它们的任务栏按钮将在任务栏上组合在一起(默认行为)。

现在我的任务是为其中一个对话框创建一个单独的任务栏按钮 windows。我找不到有关如何执行此操作的任何相关信息。我什至尝试使用 ITaskbarList COM 接口,但它的 AddTab() 方法像上面的默认模型一样工作。

是否可以为应用程序的一个实例在任务栏上放置多个按钮?如果是,请解释我如何实现它。

在 Windows 7 及更高版本中,您可以为对话框指定一个不同的 Application User Model ID,它不会与任务栏上的其他对话框分组。

参见 Raymond Chen 关于此主题的博客文章:

How do I customize how my application windows are grouped in the Taskbar?

另见:

Developing for the Windows 7 Taskbar — Application ID

例如:

int WINAPI wWinMain(HINSTANCE hinst, HINSTANCE hinstPrev,
                   LPWSTR lpCmdLine, int nShowCmd)
{
    SetCurrentProcessExplicitAppUserModelID(L"MyCompany.MyApp.MainProcess");

    ...

    HWND hDlg = ...
    IPropertyStore *pps = NULL;
    if (SUCCEEDED(SHGetPropertyStoreForWindow(hDlg, IID_PPV_ARGS(&pps))))
    {
        PROPVARIANT pv;
        PropVariantInit(&pv);
        InitPropVariantFromString(L"MyCompany.MyApp.LoneDialog", &pv);
        pps->SetValue(PKEY_AppUserModel_ID, pv);
        PropVariantClear(&pv);
        pps->Release();
    }

    ...
    return 0;
}