Finestra di dialogo attività in MFC

 C Programming >> Programmazione C >  >> Tags >> MFC
Finestra di dialogo attività in MFC

La nuova libreria MFC di Visual Studo 2010 supporta un'altra funzionalità specifica di Vista, la finestra di dialogo delle attività. Questo è inteso come un sostituto della classica finestra di dialogo e può visualizzare collegamenti ai comandi, pulsanti personalizzati, icone personalizzate e un piè di pagina.

Ecco un esempio di tale finestra di dialogo (da Windows Server 2008).

MFC contiene una nuova classe denominata CTaskDialog che implementa la finestra di dialogo delle attività. È necessario includere afxtaskdialog.h nei file per poterlo utilizzare. Poiché la finestra di dialogo delle attività è disponibile solo su Vista o versioni successive (Server 2003, Server 2008, Windows 7), è necessario verificare se è possibile utilizzarla o meno. Per questo la classe CTaskDialog fornisce un metodo statico chiamato IsSupported() che restituisce true se la finestra di dialogo dell'attività è disponibile sul sistema operativo in esecuzione. Inoltre, la finestra di dialogo delle attività è disponibile solo quando si compila per UNICODE.

Il codice seguente mostra come creare e visualizzare la finestra di dialogo dell'attività dall'immagine precedente.

void CTasksDemoDlg::OnBnClickedButtonTasks1()
{
   CString strMessage("Do you want to save your changes to the document?");
   CString strDialogTitle("Save document");
   CString strMainInstruction("Save document options");

   CString expandedLabel("Hide extra information");
   CString collapsedLabel("Show extra information");
   CString expansionInfo("You can select to save your document either as XML or binary. You should prefer to save as XML as this is the new standard format.");

   if (CTaskDialog::IsSupported())
   {
      CTaskDialog taskDialog(strMessage, strMainInstruction, strDialogTitle, TDCBF_OK_BUTTON);
      taskDialog.SetMainIcon(TD_INFORMATION_ICON);
   
      taskDialog.SetCommonButtons(TDCBF_NO_BUTTON | TDCBF_CANCEL_BUTTON);
      taskDialog.LoadCommandControls(IDS_SAVE_OPTION1, IDS_SAVE_OPTION2);
      taskDialog.SetExpansionArea(expansionInfo, collapsedLabel, expandedLabel);
      taskDialog.SetFooterText(L"Note: If you don't chose to save your changes will be lost.");
      taskDialog.SetVerificationCheckboxText(L"Remember your selection");

      INT_PTR result = taskDialog.DoModal();

      if (taskDialog.GetVerificationCheckboxState() )
      {
         // PROCESS IF the user selects the verification checkbox
      }

      switch (result)
      {
         case IDS_SAVE_OPTION1:
            AfxMessageBox(L"You chose to save as XML");
            break;
         case IDS_SAVE_OPTION2:
            AfxMessageBox(L"You chose to save as binary");
            break;
         case IDNO:
            AfxMessageBox(L"You chose not to save");
            break;
         case IDCANCEL:
            AfxMessageBox(L"You chose to cancel");
            break;
         default:
            // this case should not be hit
            ASSERT(FALSE);
            break;
      }

   }
   else
   {
      AfxMessageBox(strMessage);
   }
}

In questo esempio IDS_SAVE_OPTION1 ("Salva in formato basato su XML") e IDS_SAVE_OPTION2 ("Salva in formato binario (versione precedente)") sono due stringhe definite nella tabella delle stringhe dall'editor delle risorse.

Ci sono diverse icone predefinite in commctrl.h che possono essere usate come icona principale.

#define TD_WARNING_ICON         MAKEINTRESOURCEW(-1)
#define TD_ERROR_ICON           MAKEINTRESOURCEW(-2)
#define TD_INFORMATION_ICON     MAKEINTRESOURCEW(-3)
#define TD_SHIELD_ICON          MAKEINTRESOURCEW(-4)

I seguenti flag per i pulsanti predefiniti sono definiti nella stessa intestazione:

enum _TASKDIALOG_COMMON_BUTTON_FLAGS
{
    TDCBF_OK_BUTTON            = 0x0001, // selected control return value IDOK
    TDCBF_YES_BUTTON           = 0x0002, // selected control return value IDYES
    TDCBF_NO_BUTTON            = 0x0004, // selected control return value IDNO
    TDCBF_CANCEL_BUTTON        = 0x0008, // selected control return value IDCANCEL
    TDCBF_RETRY_BUTTON         = 0x0010, // selected control return value IDRETRY
    TDCBF_CLOSE_BUTTON         = 0x0020  // selected control return value IDCLOSE
};
typedef int TASKDIALOG_COMMON_BUTTON_FLAGS;

Un modo più semplice per creare una finestra di dialogo delle attività, ma con meno opzioni di personalizzazione, consiste nell'usare il metodo statico ShowDialog() da CTaskDialog. L'esempio seguente mostra una finestra di dialogo simile alla prima.

void CTasksDemoDlg::OnBnClickedButtonTasks2()
{
   HRESULT result2 = CTaskDialog::ShowDialog(
      L"Do you want to save your changes to the document?",
      L"Save document options",
      L"Save document",
      IDS_SAVE_OPTION1,
      IDS_SAVE_OPTION2,
      TDCBF_NO_BUTTON | TDCBF_CANCEL_BUTTON,
      TDF_ENABLE_HYPERLINKS | TDF_USE_COMMAND_LINKS,
      L"Note: If you don't chose to save your changes will be lost.");
}