這個是關於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:給這篇文章加上書籤
- [+]折疊:給這篇文章加上書籤















