这个是关于Taskbar跳清单第二的在一系列的视窗7 Taskbar杆的位置.在前一杆中,为视窗变为跳清单–第1部分发展7 Taskbar–跳,我们提出自然力包括Taskbar跳清单的:目的地(也作为“nouns”)和任务引去参考向前((也作为“verbs”)引去参考向前.你把一大量的量的对这些原理的控制作为开发者.在这杆中,我们通过当为Taskbar跳清单编制程序的时候,你能使用的不同埃皮斯步行.
在我们开始之前,有一个非常重要东西你需要知道.在最近范畴中或者在任何另一范畴((任何目的地)中“Items”必须 为你的应用在登记处中有一名登记文件操作者.这doesn’t意味着你的应用一定是为那特有文件类型缺省的,它仅仅意味着你的应用必须为所有的你想要在跳清单中是可见的文件有一名登记操作者.因此,“items”能仅是文件.记得通过轻点在跳清单中项目之一,操作系统执行,当它和你的应用关联时,和那文件有关的命令.当你登记一名文件操作者的时候,你也指定处理这文件和你的应用下定义怎样通过为应用投入参数.另一记住重要笔记:所有的项目((文件)必须有关本地硬盘驱动器也就是说是本地–和你的应用容易接近的.因此,我们能说每一个在跳清单目的地中间项目和一名向你的应用登记文件操作者是一容易接近的,本地文件.
当我们用下列的部分解释时,一旦你已经登记你的文件操作者,操作系统事实上帮助你继续了解你所有的文件.我们将使文件操作者登记处于下一个杆中.
第1步–使用开箱视窗经验和缺省的行为
按缺省,一跳清单通过SHAddToRecentDocs功能含有一个被自动在居住的对于基于文件-的应用最近范畴.这个功能给荷兰皇家壳牌的近来使用文件的清单添加使用“item”((文件).除了更新它的最近文件的清单,荷兰皇家壳牌给用户的最近目录添加一捷径.视窗7 Taskbar使用那清单和最近目录在跳清单中最近项目的清单居住.
如果你的应用的文件类型被登记,视窗能为你也做工作.你有关一文件类型和一名登记操作者双击任何时候,在视窗开始你的应用之前,它有关你的应用的利益自动呼吁SHAddToRecentDocs.这个在视窗最近清单中和最终变为跳清单最近类别把项目插入.当使用视窗共用文件Dialog((CFD)打开通过我们应用文件的时候,同样的自动行为发生.因此,这个是另一使用好的CFD在视窗中提出远景timeframe的理由,支持视窗7图书馆杆和它也在光中起充满活力认为图书馆是我们说明作用.
上述情况两者利用以防你在哪里,有文件被和最近和经常清单有关的一名登记操作者和一张应用身份证的缺省的视窗行为.除非你通过使用COM API特别去除这官能性,视窗变为跳清单自动把项目插入两个情况.显然,用户也有的选择要从他们的跳清单去除任何项目.通过明白地从跳清单去除一项目,你把它插入我们将下面讨论的远离的项目清单.
第2步–建立你的自己类别
如果缺省的最近或者经常范畴不满足你的应用的需要,现在是建立你的自己定制范畴的时候了.为了做那样,你需要使用ICustomDestinationList界面建立一定制目的地清单.
ICustomDestinationList使为在Taskbar中展示方法,其允许一个的申请提供一定制跳清单,包含目的地和任务的曝光.这里是我们正为下面例子使用的方法:
- AppendCategory定义它为接受参加一定制跳清单含有的一个定制范畴和目的地
- AppendKnownCategory明确说明经常或者最近范畴是应该被包含在跳清单内
- BeginList为一定制跳清单开始一建筑物开会
- CommitList宣布跳清单被一向BeginList呼叫开始是完整和为展示准备好
下列的代码小片展示怎样建立一被称作“CustomLists”的新定制清单和在它上添加几项目:
void CreateJumpList()
{
ICustomDestinationList *pcdl;
HRESULT hr = CoCreateInstance(
CLSID_DestinationList,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pcdl));
if (SUCCEEDED(hr))
{
//important to setup App Id for the Jump List
hr = pcdl->SetAppID(c_szAppID);
if (SUCCEEDED(hr))
{
UINT uMaxSlots;
IObjectArray *poaRemoved;
hr = pcdl->BeginList(
&uMaxSlots,
IID_PPV_ARGS(&poaRemoved));
if (SUCCEEDED(hr))
{
hr = _AddCategoryToList(pcdl, poaRemoved);
if (SUCCEEDED(hr))
{
pcdl->CommitList();
}
poaRemoved->Release();
}
}
}
}
这里你注意到我们以一标准COM预置呼叫开始.我们传呼CoCreateInstance预置ICustomDestinationList物件((这个是用COM…)工作的高兴.下一步,为了允许你开始向清单在项目居住,我们固定应用身份证.
BeginList功能为定制跳清单开始外型开会.这个功能归还最大的能在一给出跳清单中适合的项目的数目;未履行是10.你可以指出去除项目参数,IObjectArray*poaRemoved那个BeginList同样地被返回的一从参数里面.这个对任何用户从跳清单去除的特有项目有他的当前开会.我们讨论后来在这杆远离的项目清单.
下一步我们认为一帮助者是功能,_AddCategoryToList做添加进入定制范畴项目的真实工作.
// This is the helper function that actually appends the items to a collection
// object HRESULT _AddCategoryToList(ICustomDestinationList *pcdl,
// IObjectArray *poaRemoved)
{
IObjectCollection *poc;
HRESULT hr = CoCreateInstance
(CLSID_EnumerableObjectCollection,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&poc));
if (SUCCEEDED(hr))
{
for (UINT i = 0; i < ARRAYSIZE(c_rgpszFiles); i++)
{
IShellItem *psi;
if (SUCCEEDED(SHCreateItemInKnownFolder(
FOLDERID_Documents,
KF_FLAG_DEFAULT,
c_rgpszFiles[i],
IID_PPV_ARGS(&psi)))
)
{
if(!_IsItemInArray(psi, poaRemoved))
{
poc->AddObject(psi);
}
psi->Release();
}
}
IObjectArray *poa;
hr = poc->QueryInterface(IID_PPV_ARGS(&poa));
if (SUCCEEDED(hr))
{
pcdl->AppendCategory(L"Custom category", poa);
poa->Release();
}
poc->Release();
}
return hr;
}
另一我们使用的新界面是代表一支撑IUnknown的物件的收集的IObjectCollection.我们给这收集添加IShellItems.每一我们给跳清单添加的项目((文件)有一IShellItem类型.在上述代码中,我们为一在一闻名文件夹,文件里面存在的一列纵队建立一荷兰皇家壳牌项目物件.但是,在我们事实上给收集添加新项目之前,我们需要决定如果用户已经已经去除它.如果用户明白地从跳清单去除一项目,那项目将是在(再次和AppID)有关的远离的项目清单中,和作为开发者,我们需要尊敬用户的请求和避免给跳清单添加那项目.我们已经有远离的项目的清单,IObjectArray*poaRemoved,当当我们开始创造一新清单的时候,我们呼吁BeginList((…)功能的时候,我们得到的.
在这舞台,你有一用户预期进入看见跳清单的荷兰皇家壳牌项目的收集.下一步我们给ICustomDestinationList物件添加那收集和建立一个新范畴,被称为“Customcategory”,pcdl->AppendCategory((L"定制范畴",poa)的;
那样现在你成功已经建立一个在被称作“Customcategory”的Taskbar中新范畴和随着四项目在它居住.但是,我们工作未被还做.在CreateJumpList功能中最后步是要传呼CommitList结束以呼吁BeginList开始的“transaction”.仅在我们向CommitList呼叫以后 新范畴和新项目 被展示.呼吁CommitList造成被清理远离的项目和一开始新远离的项目清单的储藏清单.ICustomDestinationList界面提供一"可办理的无价值"API.
为了保证一建设性最终用户经验,确保一安全的份新重新居住于清单是完整和为使用准备好和动仅有Taskbar必须的手术是要交换指向新清单的指针.最终结果看起来像:
使用我们能给同样的应用写信使用管理代码的视窗API代码包.
一旦我们是确信我们正随着所有的Taskbar原理使用同样的AppID,我们能为按键,我们正如同在下列的代码小片中展示那样,对进行工作的建立一Taskbar跳清单的事例.这代码小片是主要应用窗户的部分CTOR:
// Set the application specific id
Taskbar.AppId = appId;
// Retrieve the taskbar jump list
jumpList = Taskbar.JumpList;
category1 = new CustomCategory("Custom Category 1");
category2 = new CustomCategory("Custom Category 2");
// Add custom categories
jumpList.CustomCategories.Add(category1);
jumpList.CustomCategories.Add(category2);
// Default values for jump lists
comboBoxKnownCategoryType.SelectedItem = "Recent";
这里你能注意到我们使AppID使用AppId财产和建立一Taskbar跳清单的事例使用Taskbar.JumpList静止财产.我们也建立说出两个范畴的名字定制类别1和定制类别2.下一步,我们给跳清单定制范畴容器添加这些范畴.最后我们设定这Taskbar跳清单的闻名范畴向前最近.将自动如同前面描绘那样,在这个居住.
在我们竖起定制范畴之后,现在是在它中表达一些内容的时候了.做那样,我们仅仅需要打电话添加功能给JumpListCollection添加一JumpListItem.JumpListItemCollection是一<IJumpListItem>举行IJumpListItem项目(的)属的收集.IJumpListItem项目为家乡IShellItem基本上是某种种包装纸.
// Specify path for shell item
string path = String.Format("{0}\\test{1}.txt",
executableFolder,
category1.JumpListItems.Count);
// Add shell item to custom category
category1.JumpListItems.Add(new JumpListItem(path));
IObjectCollection categoryContent =
(IObjectCollection)new CEnumerableObjectCollection();
// Add each link's shell representation to the object array
foreach (IJumpListItem link in category.JumpListItems)
categoryContent.AddObject(link.GetShellRepresentation());
// Add current category to destination list
HRESULT hr = customDestinationList.AppendCategory(
category.Name,
(IObjectArray)categoryContent);
当你能注意它是不成问题向前时,变为视窗7 Taskbar官能性选择.视窗为你自动履行工作的绝大部分和如果你确实需要建立你的自己范畴,那个也是非常容易.
在下一个杆中我们将描绘你怎样能给跳清单添加新任务和怎样登记一名文件操作者.
被Yochay Kiriaty写作.阅读更多伟大喂在来源是WEBSITE
禁止意见.
阅读更的多的有关otherSoftware和Sample代码和窗户7和taskbar和.Net和开发者和微软的文章.
- [+]Digg:特征是这文章
- [+]Del.icio.us:给这文章加上书签
- [+]卷:给这文章加上书签















