Compartilhar via


Exemplo: a caixa de diálogo Abrir

O exemplo de Shapes que temos usado é um pouco inventado. Vamos recorrer a um objeto COM que você pode usar em um programa real do Windows: a caixa de diálogo Abrir.

captura de tela mostrando a caixa de diálogo aberta

Para mostrar a caixa de diálogo Abrir, um programa pode usar um objeto COM chamado objeto Common Item Dialog. A Caixa de Diálogo de Item Comum implementa uma interface chamada IFileOpenDialog, que é declarada no arquivo de cabeçalho Shobjidl.h.

Aqui está um programa que exibe a caixa de diálogo Abrir para o usuário. Se o usuário selecionar um arquivo, o programa mostrará uma caixa de diálogo que contém o nome do arquivo.

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

Esse código usa alguns conceitos que serão descritos posteriormente no módulo, portanto, não se preocupe se você não entender tudo aqui. Aqui está uma estrutura de tópicos básica do código:

  1. Chame CoInitializeEx para inicializar a biblioteca COM.
  2. Chame CoCreateInstance para criar o objeto Common Item Dialog e obter um ponteiro para a interface deIFileOpenDialog dodo objeto.
  3. Chame o método Show do objeto, que mostra a caixa de diálogo para o usuário. Esse método é bloqueado até que o usuário ignore a caixa de diálogo.
  4. Chame o método GetResult do objeto. Esse método retorna um ponteiro para um segundo objeto COM, chamado de item Shell objeto. O item Shell, que implementa a interface IShellItem, representa o arquivo selecionado pelo usuário.
  5. Chame o método GetDisplayName do item shell. Esse método obtém o caminho do arquivo, na forma de uma cadeia de caracteres.
  6. Mostrar uma caixa de mensagem que exibe o caminho do arquivo.
  7. Chame CoUninitialize para não inicializar a biblioteca COM.

Etapas 1, 2 e 7 funções de chamada definidas pela biblioteca COM. Essas são funções COM genéricas. Etapas 3 a 5 métodos de chamada definidos pelo objeto Common Item Dialog.

Este exemplo mostra as variedades de criação de objeto: a função CoCreateInstance genérica e um método (GetResult) específico ao objeto Common Item Dialog.

Próximo

gerenciando o tempo de vida de um objeto

de exemplo da caixa de diálogo Abrir