例: [ファイルを開く] ダイアログ ボックス

ここまで見てきた Shape の例は、理論的な話が中心でした。ここからは実際の Windows プログラムで使用する COM オブジェクトを、[ファイルを開く] ダイアログ ボックスを例に説明します。

 

[ファイルを開く] ダイアログ ボックスのスクリーン ショット

[ファイルを開く] ダイアログ ボックスのスクリーン ショット

 

[ファイルを開く] ダイアログ ボックスを表示する場合、プログラムは Common Item Dialog オブジェクトと呼ばれる COM オブジェクトを使用できます。Common Item Dialog はヘッダー ファイル Shobjidl.h で宣言される IFileOpenDialog という名前のインターフェイスを実装します。

ユーザーに [ファイルを開く] ダイアログ ボックスを表示するプログラムを以下に示します。ユーザーがファイルを選択すると、ファイル名が表示されたダイアログ ボックスがプログラムによって表示されます。


#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;

        // FileOpenDialog オブジェクトを作成する
        hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, 
                IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));

        if (SUCCEEDED(hr))
        {
            // [ファイルを開く] ダイアログ ボックスを表示する
            hr = pFileOpen->Show(NULL);

            // ダイアログ ボックスからファイル名を取得する
            if (SUCCEEDED(hr))
            {
                IShellItem *pItem;
                hr = pFileOpen->GetResult(&pItem);
                if (SUCCEEDED(hr))
                {
                    PWSTR pszFilePath;
                    hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);

                    // ユーザーにファイル名を表示する
                    if (SUCCEEDED(hr))
                    {
                        MessageBox(NULL, pszFilePath, L"File Path", MB_OK);
                        CoTaskMemFree(pszFilePath);
                    }
                    pItem->Release();
                }
            }
            pFileOpen->Release();
        }
        CoUninitialize();
    }
    return 0;
}


このコードで採用されている概念はこのモジュールの後半で説明するので、現時点ですべてを理解している必要はありません。このコードの基本的な概要を以下に示します。

  1. CoInitializeEx を呼び出して COM ライブラリを初期化します。
  2. CoCreateInstance を呼び出して Common Item Dialog オブジェクトを作成し、オブジェクトの IFileOpenDialog インターフェイスへのポインターを取得します。
  3. ユーザーにダイアログ ボックスを表示する、オブジェクトの Show メソッドを呼び出します。ユーザーがダイアログ ボックスをキャンセルするまで、このメソッドによってブロックが実行されます。
  4. オブジェクトの GetResult メソッドを呼び出します。このメソッドは、Shell Item オブジェクトと呼ばれる 2 つ目の COM オブジェクトへのポインターを返します。IShellItem インターフェイスを実装する Shell Item は、ユーザーによって選択されたファイルを表しています。
  5. Shell Item の GetDisplayName メソッドを呼び出します。このメソッドがファイル パスを文字列の形式で取得します。
  6. ファイル パスを表示するメッセージ ボックスを表示します。
  7. CoUninitialize を呼び出して COM ライブラリを初期化解除します。

ステップ 1、2、および 7 が呼び出す関数は COM ライブラリによって定義されています。これらは汎用の COM 関数です。ステップ 3 および 5 で呼び出される関数は Common Item Dialog オブジェクトによって定義されています。

この例には、汎用の CoCreateInstance 関数と、Common Item Dialog オブジェクトに固有のメソッド (GetResult) という 2 種類のオブジェクト作成方法が示されています。

次のトピック

オブジェクトの有効期間を管理する

関連トピック

[ファイルを開く] ダイアログ ボックスのサンプル

 

 

このトピックに関するご意見をお寄せください (英語のみ)。

作成日: 2010 年 10 月 5 日

コミュニティの追加

追加
表示:
© 2015 Microsoft