Compartir a través de


Ejemplo: El cuadro de diálogo Abrir

El Shapes ejemplo que hemos estado usando es algo contrived. Vamos a pasar a un objeto COM que puede usar en un programa real de Windows: el cuadro de diálogo Abrir .

captura de pantalla que muestra el cuadro de diálogo abrir

Para mostrar el cuadro de diálogo Abrir , un programa puede usar un objeto COM denominado objeto Diálogo de elemento común. El cuadro de diálogo de elemento común implementa una interfaz denominada IFileOpenDialog, que se declara en el archivo de encabezado Shobjidl.h.

Este es un programa que muestra el cuadro de diálogo Abrir al usuario. Si el usuario selecciona un archivo, el programa muestra un cuadro de diálogo que contiene el nombre de archivo.

#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))
                    {
                        MessageBoxW(NULL, pszFilePath, L"File Path", MB_OK);
                        CoTaskMemFree(pszFilePath);
                    }
                    pItem->Release();
                }
            }
            pFileOpen->Release();
        }
        CoUninitialize();
    }
    return 0;
}

Este código usa algunos conceptos que se describirán más adelante en el módulo, por lo que no se preocupe si no entiende todo aquí. Este es un esquema básico del código:

  1. Llame a CoInitializeEx para inicializar la biblioteca COM.
  2. Llame a CoCreateInstance para crear el objeto Diálogo de elemento común y obtener un puntero a la interfaz IFileOpenDialog del objeto.
  3. Llame al método Show del objeto, que muestra el cuadro de diálogo al usuario. Este método se bloquea hasta que el usuario descarta el cuadro de diálogo.
  4. Llame al método GetResult del objeto. Este método devuelve un puntero a un segundo objeto COM, denominado objeto de elemento shell . El elemento Shell, que implementa la interfaz IShellItem , representa el archivo seleccionado por el usuario.
  5. Llame al método GetDisplayName del elemento shell. Este método obtiene la ruta de acceso del archivo, en forma de cadena.
  6. Muestra un cuadro de mensaje que muestra la ruta de acceso del archivo.
  7. Llame a CoUninitialize para anular la inicialización de la biblioteca COM.

Pasos 1, 2 y 7 llaman a funciones definidas por la biblioteca COM. Se trata de funciones COM genéricas. Pasos del 3 al 5 llaman a métodos definidos por el objeto Diálogo de elemento común.

En este ejemplo se muestran ambas variedades de creación de objetos: la función CoCreateInstance genérica y un método (GetResult) específico del objeto Dialog de elemento común.

Siguientes

Administrar la duración de un objeto

Abrir ejemplo de cuadro de diálogo