1. 程式人生 > >Windows桌面應用程式(1-2-3-5th) 示例:開啟對話方塊

Windows桌面應用程式(1-2-3-5th) 示例:開啟對話方塊

我們一直使用的Shapes示例有點人為設計。現在我們來看一個可以在真正的Windows程式中使用的COM物件:開啟對話方塊。
這裡寫圖片描述
顯示“開啟”對話方塊的螢幕截圖

要顯示“ 開啟”對話方塊,程式可以使用一個名為Common Item Dialog物件的COM物件。Common Item對話方塊實現了一個名為IFileOpenDialog的介面,該介面在標頭檔案Shobjidl.h中宣告。

這是一個向用戶顯示“ 開啟”對話方塊的程式。如果使用者選擇一個檔案,程式將顯示一個包含檔名的對話方塊。

#include<windows.h>
#include<shobjidl.h> 
int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE,PWSTR pCmdLine,int nCmdShow){ HRESULT hr=CoInitializeEx(NULL,COINIT_APARTMENTTHREADED|COINIT_DISABLE_OLE1DDE); if(SUCCEEDED(hr)){ IFileOpenDialog *pFileOpen; // Create the FileOpenDialog object. hr=CoCreateInstance(CLSID_FileOpenDialog,NULL,CLSCTX_ALL,IID_IFileOpenDialog,reinterpret_cast
<void**>(&pFileOpen)); if(SUCCEEDED(hr)){ // Show the Open dialog box. hr=pFileOpen->Show(NULL); // Get the file name from the dialog box. if(SUCCEEDED(hr)){ IShellItem *pItem; hr=pFileOpen->GetResult(&pItem); if
(SUCCEEDED(hr)){ PWSTR pszFilePath; hr=pItem->GetDisplayName(SIGDN_FILESYSPATH,&pszFilePath); // Display the file name to the user. if(SUCCEEDED(hr)){ MessageBox(NULL,pszFilePath,L"File Path",MB_OK); CoTaskMemFree(pszFilePath); } pItem->Release(); } } pFileOpen->Release(); } CoUninitialize(); } return 0; }

這段程式碼使用了將在後面的模組中介紹的概念,所以如果你不瞭解這裡的所有內容,請不要擔心。這是程式碼的基本概述:

  1. 呼叫物件的Show方法,該方法向用戶顯示對話方塊。此方法阻塞,直到使用者關閉對話方塊。
  2. 呼叫物件的GetResult方法。此方法返回一個指向第二個COM物件的指標,稱為Shell專案物件。實現IShellItem介面的Shell項表示使用者選擇的檔案。
  3. 呼叫Shell專案的GetDisplayName方法。此方法以字串的形式獲取檔案路徑。
  4. 顯示一個顯示檔案路徑的訊息框。

步驟1,2和7呼叫由COM庫定義的函式。這些是通用的COM功能。步驟3-5呼叫通用專案對話方塊物件定義的方法。

此示例顯示了兩種不同的物件建立方式:通用CoCreateInstance函式和特定於Common Item Dialog物件的方法(GetResult)。