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. 调用CoInitializeEx来初始化COM库。
  2. 调用CoCreateInstance创建Common Item Dialog对象,并获取指向对象的IFileOpenDialog接口的指针。
  3. 调用对象的Show方法,该方法向用户显示对话框。此方法阻塞,直到用户关闭对话框。
  4. 调用对象的GetResult方法。此方法返回一个指向第二个COM对象的指针,称为Shell项目对象。实现IShellItem接口的Shell项表示用户选择的文件。
  5. 调用Shell项目的GetDisplayName方法。此方法以字符串的形式获取文件路径。
  6. 显示一个显示文件路径的消息框。
  7. 调用CoUninitialize以取消初始化COM库。

步骤1,2和7调用由COM库定义的函数。这些是通用的COM功能。步骤3-5调用通用项目对话框对象定义的方法。

此示例显示了两种不同的对象创建方式:通用CoCreateInstance函数和特定于Common Item Dialog对象的方法(GetResult)。

下一个
管理对象的生命周期

相关话题
打开对话框示例

猜你喜欢

转载自blog.csdn.net/qq_37422196/article/details/79763928
今日推荐