Compartilhar via


Exemplo: a caixa de diálogo Abrir

O Shapes exemplo 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 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 IFileOpenDialog do objeto.
  3. Chame o método Show do objeto, que mostra a caixa de diálogo para o usuário. Esse método bloqueia 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 objeto de item Shell . 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.

As etapas 1, 2 e 7 chamam funções definidas pela biblioteca COM. São funções COM genéricas. Etapas 3 a 5 chamam métodos definidos pelo objeto Common Item Dialog.

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

Avançar

Gerenciando o tempo de vida de um objeto

Abrir exemplo de caixa de diálogo