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