Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对话框的单独任务栏按钮_C++_Windows_Winapi_Taskbar - Fatal编程技术网

C++ 对话框的单独任务栏按钮

C++ 对话框的单独任务栏按钮,c++,windows,winapi,taskbar,C++,Windows,Winapi,Taskbar,我支持基于WinAPI/ATL的应用程序,根据用户操作创建了许多对话框窗口。大多数对话框都是无主窗口。如果同时创建多个对话框,则它们的任务栏按钮在任务栏上分组在一起(默认行为) 现在我有一个任务,为其中一个对话框窗口创建一个单独的任务栏按钮。我找不到任何关于如何做这件事的相关信息。我甚至尝试使用ITaskbarListCOM接口,但其AddTab()方法的工作原理与上面的默认模型类似 对于应用程序的一个实例,是否可以在任务栏上放置多个按钮?如果是,请解释我如何实现此功能。在Windows 7及更

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

现在我有一个任务,为其中一个对话框窗口创建一个单独的任务栏按钮。我找不到任何关于如何做这件事的相关信息。我甚至尝试使用
ITaskbarList
COM接口,但其
AddTab()
方法的工作原理与上面的默认模型类似


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

在Windows 7及更高版本上,您可以为该对话框分配不同的功能,并且不会将其与任务栏上的其他对话框分组

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

另见:

例如:

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;
}

在Windows 7及更高版本上,您可以为该对话框指定不同的对话框,并且该对话框不会与任务栏上的其他对话框分组

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

另见:

例如:

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;
}

感谢您的回答,SetCurrentProcessExplicitAppUserModelID()解决了我的问题:)事实上,我以前见过这些链接,但希望单进程应用程序有更简单的方法,因为根据当前的解决方案,在显示目标对话框窗口后,我需要恢复以前的AUMID(对不起,我的英语)@重要的是,如果您计划让对话框显示其自己的任务栏按钮,然后重新合并到主组中,则只需恢复以前的AUMID。请记住,每个窗口都可以有自己的AUMID,
SetCurrentProcessExplicitAppUserModelID
只设置进程范围内的默认AUMID,但每个窗口并不限于该AUMID。感谢您的回答,SetCurrentProcessExplicitAppUserModelID()解决了我的问题:)事实上我以前看过这些链接,但我希望单进程应用程序有更简单的方法,因为根据当前的解决方案,在显示目标对话框窗口后,我需要恢复以前的AUMID(对不起,我的英语)@重要的是,如果您计划让对话框显示其自己的任务栏按钮,然后重新合并到主组中,则只需恢复以前的AUMID。请记住,每个窗口都可以有自己的AUMID,
SetCurrentProcessExplicitAppUserModelID
只设置进程范围内的默认AUMID,但每个窗口不限于该AUMID。