新聞中心
新的特性,讓我們的操作系統(tǒng)及其以此為平臺的各種應(yīng)用程序更加易用,更加強(qiáng)大。而作為Windows平臺的開發(fā)人員,新操作系統(tǒng)的到來則為我們帶來了更多的機(jī)會,我們可以借助新的操作系統(tǒng)的各種新特性,讓我們的應(yīng)用程序更加易用,更加強(qiáng)大,更有利于提高用戶的生產(chǎn)效率;同時(shí)新的操作系統(tǒng)也給我們帶來更多的挑戰(zhàn),我們每個(gè)開發(fā)者都在考慮自己開發(fā)的應(yīng)用程序是不是“Ready for Windows 7”?是否跟新的操作系統(tǒng)兼容?是否能夠利用新的操作系統(tǒng)的各種新特性?為Windows 7開發(fā)應(yīng)用程序,成為我們面前的一個(gè)新的課題。

另外,伴隨著Visual Studio 2010 beta1的發(fā)布,下一代基于Windows的應(yīng)用程序開發(fā)平臺已經(jīng)初具雛形:Windows 7 + Visual Studio 2010。這里,我們就基于這一全新的開發(fā)平臺,為即將到來的Windows 7開發(fā)應(yīng)用程序。
在Windows 7 RC中,我們可能最先發(fā)現(xiàn)的就是它的界面更加華麗,易用性進(jìn)一步提高了。其中最引人矚目的就是它所帶來的革命性的新任務(wù)欄。在這個(gè)全新設(shè)計(jì)的任務(wù)欄中,我們可以運(yùn)行各種應(yīng)用程序;在應(yīng)用程序之間進(jìn)行快速切換或者是在同一個(gè)應(yīng)用程序中的不同頁面之間切換;管理最新文檔/最常用的文檔;訪問通用的應(yīng)用程序任務(wù);向用戶報(bào)告程序的進(jìn)度和狀態(tài)等等。通過這些豐富的功能,新的任務(wù)欄給Windows 7應(yīng)用程序的執(zhí)行帶來了極大的便利,對用戶更加友好。所以,讓我們的應(yīng)用程序支持新的任務(wù)欄,可以說是讓我們的應(yīng)用程序“Ready for Windows 7”的第一步。
Windows 7中的任務(wù)欄主要包括這些新特性:可以快速執(zhí)行任務(wù)或者打開文檔的Jumplist;實(shí)時(shí)的應(yīng)用程序預(yù)覽以及應(yīng)用程序進(jìn)度和狀態(tài)報(bào)告。在本文中,我們首先讓應(yīng)用程序可以支持Jumplist功能,實(shí)現(xiàn)從Vista到Windows 7的Jump!
Jumplist概述
Jumplist實(shí)際上是任務(wù)欄圖標(biāo)的右鍵菜單。任務(wù)欄圖標(biāo)的右鍵菜單很早就有了,但是都只是提供一些簡單的窗口管理功能,比如窗口的關(guān)閉,最小化,恢復(fù)等等。在Windows 7中,微軟引入了任務(wù)欄圖標(biāo)Jumplist的概念,從Jumplist的表現(xiàn)形式來看,它實(shí)際上就像一個(gè)Mini版的開始菜單,只是通常意義上的開始菜單是針對整個(gè)操作系統(tǒng),而Jumplist則是針對單個(gè)應(yīng)用程序。通過Jumplist,我們可以快速地訪問應(yīng)用程序的各種最常用功能。比如通過Word 2007的Jumplist,我們可以直接打開最近打開過的文檔,運(yùn)行Word應(yīng)用程序,將文檔/應(yīng)用程序固定在任務(wù)欄上等等。對于我們開發(fā)的應(yīng)用程序,還可以添加更多的自定義任務(wù)。
圖1 Jumplist是Mini開始菜單
為了更好地理解并為我們自己的應(yīng)用程序創(chuàng)建Jumplist,我們來分析一下Jumplist所包含的內(nèi)容。在下圖中我們可以看到,Jumplist主要包含了兩項(xiàng):目標(biāo)(名詞)和任務(wù)(動詞)。其中目標(biāo)包含最新使用和最常使用的文檔。為了便于管理,我們還可以將這些文檔進(jìn)行進(jìn)一步的分類,甚至創(chuàng)建自己的自定義分類等。而Jumplist中的任務(wù)則是指跟此應(yīng)用程序相關(guān)的各項(xiàng)動作,比如執(zhí)行某個(gè)相關(guān)的應(yīng)用程序,執(zhí)行應(yīng)用程序的某些常用操作等等。這樣,我們在執(zhí)行應(yīng)用程序的一些最常用的動作的時(shí)候,就無需切換到應(yīng)用程序界面而直接從Jumplist執(zhí)行就可以了,這就為快速訪問應(yīng)用程序功能帶來了極大的便利,從而提高用戶的生產(chǎn)效率。
圖2 Jumplist詳解
既然Jumplist如此威力強(qiáng)大,下面我們就來為我們自己的應(yīng)用程序添加Jumplist支持。在本文中,我們將創(chuàng)建一個(gè)簡易的圖片查看應(yīng)用程序,然后為其添加一個(gè)Jumplist功能,從Jumplist中訪問最新的文檔和打開畫圖程序等等。
首先我們啟動Visual Studio 2010,然后創(chuàng)建一個(gè)C#的Windows Form應(yīng)用程序并且將界面編輯如下:
圖3 簡易圖片查看器
其中,我們使用一個(gè)按鈕“注冊擴(kuò)展名”來注冊擴(kuò)展名,將這個(gè)應(yīng)用程序跟某種文件后綴相互關(guān)聯(lián)。而另外一個(gè)“打開文件”按鈕可以調(diào)用通用的文件打開對話框載入圖片。最后,我們使用一個(gè)PictureBox控件來顯示圖片。
為了實(shí)現(xiàn)Windows 7上的任務(wù)欄編程,我們必須首先添加項(xiàng)目對Windows7.DesktopIntegration.dll,
Windows7.DesktopIntegration.RegistrationHelper.exe和VistaBridgeLibrary.dll的引用。這些DLL,那你可以從微軟的網(wǎng)站上獲得。利用這幾個(gè)程序集所提供的輔助功能,我們就能很方便地實(shí)現(xiàn)任務(wù)欄的編程開發(fā)。
圖4 添加對DLL的引用
展開全部 文本Tag: Visual Studio 應(yīng)用程序 微軟 c# .NET Framework 軟件開發(fā) windows 7
注冊應(yīng)用程序ID(Application ID)和文件擴(kuò)展名
為了對任務(wù)欄中停留的各種應(yīng)用程序進(jìn)行分組,在Windows 7中,操作系統(tǒng)新引入了應(yīng)用程序ID(Application ID)的概念。應(yīng)用程序ID(Application ID)是用來標(biāo)示各個(gè)應(yīng)用程序的,它并不是我們常見的GUID,而是一個(gè)少于128個(gè)字符的字符串。默認(rèn)情況下,應(yīng)用程序的ID是由操作系統(tǒng)根據(jù)進(jìn)程名計(jì)算而得的,當(dāng)然,我們也可以人為地為應(yīng)用程序指定Application ID。在Windows 7中,很多地方都會用到應(yīng)用程序ID,比如進(jìn)程,窗口,任務(wù)欄按鈕等等。
圖5 應(yīng)用程序ID
在Windows 7的任務(wù)欄中,它根據(jù)各個(gè)應(yīng)用程序的ID對其進(jìn)行分組。同時(shí),為了對應(yīng)用程序的Jumplist進(jìn)行自定義,我們需要人為的設(shè)置應(yīng)用程序的Application ID。
我們搜先為窗體添加窗體加載函數(shù)Form1_Load(),然后在窗體的加載函數(shù)中,我們設(shè)置應(yīng)用程序的ID如下:
- private const string APP_ID = "WindowsSeven.Taskbar.JumplistDemo";
- private void Form1_Load(object sender, EventArgs e)
- {
- // 設(shè)置用用程序ID
- Windows7Taskbar.SetCurrentProcessAppId(APP_ID);
- // …
- }
#p#
使用通用的Jumplist功能
完成應(yīng)用程序ID的注冊后,我們就像擁有了應(yīng)用程序的身份證,可以開始對應(yīng)用程序進(jìn)行操作了。Windows 7操作系統(tǒng)為任務(wù)欄提供了很多通用的功能,比如如果我們使用通用的文件打開對話框打開過某個(gè)文件,那么它就會自動將我們打開的文件添加到應(yīng)用程序的Jumplist中。為了利用這些Windows 7提供給我們的通用任務(wù)欄功能,我們需要注冊文件擴(kuò)展名,將某個(gè)特定的文件擴(kuò)展名跟我們的應(yīng)用程序綁定在一起,這樣,當(dāng)我們在應(yīng)用程序中打開這種類型的文件后,文件就會出現(xiàn)在應(yīng)用程序的Jumplist中。首先,我們?yōu)椤白詳U(kuò)展名”按鈕添加點(diǎn)擊動作響應(yīng)函數(shù)并實(shí)現(xiàn)如下:
- private void RegisterAssociation_Click(object sender, EventArgs e)
- {
- // 注冊擴(kuò)展名,實(shí)現(xiàn)文件關(guān)聯(lián)
- RegistrationHelper.RegisterFileAssociations(
- APP_ID, false, Windows7Taskbar.GetCurrentProcessAppId(),
- Assembly.GetExecutingAssembly().Location + " /doc:%1",
- ".jpg");
- }
在這段代碼中,我們利用RegistrationHelper將“.jpg”跟我們的應(yīng)用程序綁定在一起了,當(dāng)我們在應(yīng)用程序中使用通用對話框打開這種類型的文件時(shí),操作系統(tǒng)會自動將這些最近打開的文檔添加到應(yīng)用程序的Jumplist中。
接下來,我們利用通用文件對話框打開圖片文件并將其顯示到界面上。將“打開文件”按鈕的點(diǎn)擊命令函數(shù)實(shí)現(xiàn)如下:
- private void LoadPic_Click(object sender, EventArgs e)
- {
- // 調(diào)用通用打開文件對話框打開圖片文件
- OpenFileDialog ofd = new OpenFileDialog();
- if (ofd.ShowDialog() != DialogResult.OK)
- return;
- // 將圖片顯示到界面上
- pictureBox1.ImageLocation = ofd.FileName;
- }
現(xiàn)在,我們就可以編譯運(yùn)行整個(gè)解決方案。首先我們點(diǎn)擊“注冊擴(kuò)展名”按鈕,進(jìn)行文件擴(kuò)展名的注冊。然后,通過“打開文件”按鈕,我們打開一個(gè)jpg后綴的圖片文件并將其顯示到界面上。
圖6,Jumplist中最近打開的文檔
這時(shí)我們就可以在應(yīng)用程序的Jumplist中看到我們最近打開的文件了。只需要簡單的幾行代碼,我們就實(shí)現(xiàn)了Jumplist的功能,為應(yīng)用程序添加Jumplist是不是非常簡單呢?
有時(shí)候,我們還希望將一些特殊的常用文件添加到Jumplist中,不管這個(gè)文件是否曾經(jīng)打開過。這時(shí),我們借助JumpListManager類可以將特定的文檔添加到Jumplist中。例如:
- private void LoadPic_Click(object sender, EventArgs e)
- {
- // 將特定文檔添加到Jumplist的“最近打開”
- JumpListManager jlm = new JumpListManager(APP_ID);
- jlm.UserRemovedItems += delegate { };
- jlm.AddToRecent("DemoPicture.jpg");
- }
在這段代碼中,我們創(chuàng)建了一個(gè)JumpListManager類的實(shí)例并利用應(yīng)用程序ID進(jìn)行初始化。然后我們就可以將自定義的文檔添加到Jumplist的“最新打開”目錄下了。
從Jumplist打開最新文檔
現(xiàn)在,我們就點(diǎn)擊應(yīng)用程序的Jumplist中的“最近打開”的文件,我們可以發(fā)現(xiàn)當(dāng)我們點(diǎn)擊文件后,雖然應(yīng)用程序啟動了,但是文件并沒有被加載進(jìn)來。所以,我們還需要對窗體的加載函數(shù)進(jìn)行修改,讓它可以支持從Jumplist打開文檔:
- private const string APP_ID = "WindowsSeven.Taskbar.JumplistDemo";
- private void Form1_Load(object sender, EventArgs e)
- {
- // 注冊應(yīng)用程序ID
- Windows7Taskbar.SetCurrentProcessAppId(APP_ID);
- // 判斷命令行是否包含“/doc”
- if (Environment.CommandLine.Contains("/doc"))
- {
- // 從命令行中提取文件路徑
- string doc = Environment.CommandLine.Substring(
- Environment.CommandLine.IndexOf("/doc") +
- "/doc".Length + 1);
- pictureBox1.ImageLocation = doc;
- }
- }
- }
經(jīng)過這樣的修改,當(dāng)我們從Jumplist打開文檔時(shí),窗體在加載的時(shí)候,就會從命令行字符串中提取我們點(diǎn)擊的文件的路徑并打開顯示到窗體界面中。
添加自定義任務(wù)
現(xiàn)在,我們已經(jīng)知道如果為應(yīng)用程序的Jumplist添加目標(biāo)了,接下來,我們將介紹如何為Jumplist添加一個(gè)任務(wù),完成各種跟應(yīng)用程序相關(guān)的動作。
既然我們開發(fā)的是一個(gè)簡易的圖片瀏覽程序,很多時(shí)候,我們可能希望可以打開Windows的畫圖程序?qū)D片進(jìn)行編輯。為了用戶可以快速打開畫圖程序,我們將它添加到自定義任務(wù)中。同時(shí),我們也可以在自定義任務(wù)中添加其他的文檔。比如,我們有幾張需要經(jīng)常參考的色標(biāo)圖,這時(shí)我們就可以在Jumplist中新創(chuàng)建一個(gè)“色標(biāo)”分類,然后將這些色標(biāo)圖添加到這個(gè)分類中。
為了完成上面的兩個(gè)功能,我們需要“Windows 7 Bridge Sample”所提供的JumpListManager類。首先我們在窗體類中聲明一個(gè)JumpListManager類的對象,然后我們重載窗體的WndProc函數(shù)并將其實(shí)現(xiàn)如下:
- JumpListManager _jumpListManager;
- protected override void WndProc(ref Message m)
- {
- if (m.Msg == Windows7Taskbar.TaskbarButtonCreatedMessage)
- {
- // 創(chuàng)建對象并利用應(yīng)用程序ID對其進(jìn)行初始化
- _jumpListManager = new JumpListManager(APP_ID);
- _jumpListManager.UserRemovedItems += delegate { };
- // 構(gòu)造一個(gè)ShellLink,添加為任務(wù)
- _jumpListManager.AddUserTask(new ShellLink
- {
- PathPath = Path.Combine(Environment.GetFolderPath(
- Environment.SpecialFolder.System),
- @"mspaint.exe"),
- Title = "啟動Windows畫圖工具"
- });
- // 添加自定義目標(biāo)文件
- _jumpListManager.AddCustomDestination(new ShellItem
- {
- Path = Directory.GetParent(
- Assembly.GetExecutingAssembly().Location) +
- @"\ColorTab.jpg",
- Category = "色標(biāo)文件"
- });
- _jumpListManager.Refresh();
- }
在上面的代碼中,我們利用JumpListManager類為Jumplist添加了自定義的用戶任務(wù),同時(shí)添加了一個(gè)自定義的文檔分類并添加了相應(yīng)的內(nèi)容?,F(xiàn)在編譯執(zhí)行解決方案,就可以看到效果了。
圖7 自定義任務(wù)
通過對Jumplist的編程開發(fā),我們實(shí)現(xiàn)了在文檔之間的跳轉(zhuǎn)和功能任務(wù)之間的跳轉(zhuǎn),從此再也不用為打開某個(gè)常用文檔或者常用功能而在程序菜單中迷茫了。
Let’s Jump!
【編輯推薦】
- Visual Studio 2010爆F(xiàn)#二進(jìn)制兼容性問題
- 推薦Visual Studio 2010中F#的一些資源
- Visual Studio 2010 Beta1試用手記
- Visual Studio 2010重要新功能一覽
- 微軟發(fā)布Visual Studio 2010 Beta 1
網(wǎng)站題目:Jumplist—Win 7與VS2010華麗共舞的平臺
標(biāo)題網(wǎng)址:http://m.5511xx.com/article/cdcepde.html


咨詢
建站咨詢
