Partilhar via


Passo a passo: Adicionando um CTaskDialog a um aplicativo

Este passo a passo apresenta a classe CTaskDialog e mostra como adicioná-la ao seu aplicativo.

A CTaskDialog é uma caixa de diálogo de tarefa que substitui a caixa de mensagem do Windows no Windows Vista ou posterior. O CTaskDialog melhora a caixa de mensagem original e adiciona funcionalidade. A caixa de mensagem do Windows ainda é suportada no Visual Studio.

Observação

As versões do Windows anteriores ao Windows Vista não suportam o CTaskDialog. Você deve programar uma opção de caixa de diálogo alternativa se quiser mostrar uma mensagem a um usuário que executa seu aplicativo em uma versão anterior do Windows. Você pode usar o método estático CTaskDialog::IsSupported para determinar em tempo de execução se o computador de um usuário pode exibir um CTaskDialog. Além disso, o CTaskDialog só está disponível quando seu aplicativo é criado com a biblioteca Unicode.

O CTaskDialog suporta vários elementos opcionais para reunir e exibir informações. Por exemplo, um CTaskDialog pode exibir links de comando, botões personalizados, ícones personalizados e um rodapé. O CTaskDialog também tem vários métodos que permitem consultar o estado da caixa de diálogo da tarefa para determinar quais elementos opcionais o usuário selecionou.

Pré-requisitos

Você precisa dos seguintes componentes para concluir este passo a passo:

  • Visual Studio 2010 ou posterior
  • Windows Vista ou posterior

Substitua a caixa de mensagem do Windows por um CTaskDialog

A seguir demonstra o uso mais básico do CTaskDialog, que é substituir a caixa de mensagem do Windows. Este exemplo também altera o ícone associado à caixa de diálogo da tarefa. Alterar o ícone faz com que o CTaskDialog pareça semelhante à caixa de mensagem do Windows.

  1. Use o MFC Application Wizard para criar um aplicativo Microsoft Foundation Classes (MFC) com todas as configurações padrão. Consulte Passo a passo: Usando os novos controles de shell MFC para obter instruções sobre como abrir o assistente para sua versão do Visual Studio.

  2. Nomeie-o MyProject.

  3. Use o Gerenciador de Soluções para abrir MyProject.cpp.

  4. Adicione #include "afxtaskdialog.h" após a lista de inclusões.

  5. Encontre o método CMyProjectApp::InitInstance. Insira as seguintes linhas de código antes da instrução return TRUE;. Esse código cria as cadeias de caracteres que usamos na caixa de mensagem do Windows ou no CTaskDialog.

    CString message("My message to the user");
    CString dialogTitle("My Task Dialog title");
    CString emptyString;
    
    // Check whether the user's computer supports `CTaskDialog`.
    // If not, display a Windows message box instead.
    if (CTaskDialog::IsSupported())
    {
        CTaskDialog taskDialog(message, emptyString, dialogTitle, TDCBF_OK_BUTTON);
        taskDialog.SetMainIcon(TD_WARNING_ICON); // Set the icon to be the same as the Windows message box
        taskDialog.DoModal();
    }
    else
    {
        AfxMessageBox(message);
    }
    

Compile e execute o aplicativo. O aplicativo exibe a caixa de diálogo da tarefa depois que ela é iniciada.

Adicionar funcionalidade ao CTaskDialog

A seguir mostra como adicionar funcionalidade ao CTaskDialog que você criou no procedimento anterior. O código de exemplo mostra como executar instruções específicas com base nas seleções do usuário.

  1. Navegue até Vista de Recursos através de Vista>Outras Janelas>Vista de Recursos.

  2. Expanda a Modo de Exibição de Recursos para a pasta Tabela de Cadeia de Caracteres. Expanda-o e clique duas vezes String Table.

  3. Role até a parte inferior da tabela de cadeia de caracteres e adicione uma nova entrada. Altere o ID para TEMP_LINE1. Defina a legenda como Command Line 1.

  4. Adicione outra nova entrada. Altere o ID para TEMP_LINE2. Defina a legenda como Command Line 2.

  5. Navegue de volta para MyProject.cpp.

  6. Na função CMyProjectApp::InitInstance(), após CString emptyString; adicione o seguinte código:

    CString expandedLabel("Hide extra information");
    CString collapsedLabel("Show extra information");
    CString expansionInfo("This is the additional information to the user,\nextended over two lines.");
    
  7. Encontre a instrução taskDialog.DoModal() e substitua-a pelo código a seguir. Esse código atualiza a caixa de diálogo da tarefa e adiciona novos controles:

    taskDialog.SetMainInstruction(L"Warning");
    taskDialog.SetCommonButtons(TDCBF_YES_BUTTON | TDCBF_NO_BUTTON | TDCBF_CANCEL_BUTTON);
    taskDialog.LoadCommandControls(TEMP_LINE1, TEMP_LINE2);
    taskDialog.SetExpansionArea(expansionInfo, collapsedLabel, expandedLabel);
    taskDialog.SetFooterText(L"This is a small footnote to the user");
    taskDialog.SetVerificationCheckboxText(L"Remember your selection");
    INT_PTR result = taskDialog.DoModal();
    
    if (taskDialog.GetVerificationCheckboxState())
    {
        // Your code if the user selects the verification checkbox
    }
    
    switch (result)
    {
        case TEMP_LINE1:
            // PROCESS IF the first command line
            break;
        case TEMP_LINE2:
            // PROCESS IF the second command line
            break;
        case IDYES:
            // PROCESS IF the user clicks yes
            break;
        case IDNO:
            // PROCESS IF the user clicks no
            break;
        case IDCANCEL:
            // PROCESS IF the user clicks cancel
            break;
        default:
            // This case should not be hit because closing
            // the dialog box results in IDCANCEL
            break;
    }
    

Compile e execute o aplicativo. O aplicativo exibe a caixa de diálogo de tarefa que usa os novos controles e informações adicionais.

Exibindo um CTaskDialog sem criar um objeto CTaskDialog

A seguir mostra como exibir um CTaskDialog sem primeiro criar um objeto CTaskDialog. Este exemplo continua os procedimentos anteriores.

Para exibir um CTaskDialog sem criar um objeto CTaskDialog

  1. Abra o arquivo MyProject.cpp.

  2. Na função CMyProjectApp::InitInstance(), navegue até o colchete de fechamento da instrução if (CTaskDialog::IsSupported()).

  3. Insira o seguinte código imediatamente antes do colchete de fechamento da instrução if (antes do bloco else):

    HRESULT result2 = CTaskDialog::ShowDialog(L"My error message",
        L"Error",
        L"New Title",
        TEMP_LINE1,
        TEMP_LINE2);
    

Compile e execute o aplicativo. O aplicativo exibe duas caixas de diálogo de tarefas. A primeira caixa de diálogo é do para adicionar funcionalidade ao procedimento de CTaskDialog; a segunda caixa de diálogo é do procedimento anterior.

Estes exemplos não demonstram todas as opções disponíveis para um CTaskDialog, mas devem ajudá-lo a começar. Consulte de classe CTaskDialog para obter uma descrição completa da classe.

Ver também

Caixas de Diálogo
CTaskDialog Classe
CTaskDialog::CTaskDialog