Einzelnen Beitrag anzeigen

MathiasSimmack
(Gast)

n/a Beiträge
 
#37

Re: Entwicklung für Vista und XP

  Alt 6. Aug 2006, 15:15
Ich habe mal mit einer CSharp-Klasse für den einfachen TaskDialog (nicht TaskDialogIndirect!) angefangen. Die Anwendung ist ähnlich wie die MessageBox. Vom einfachen Aufruf nur mit dem Inhalt bis hin zum kompletten Aufruf inkl. Titel, Buttons, usw. Nur mit dem Symbol habe ich noch Probleme. Grundsätzlich sieht die Deklaration so aus:
Code:
[DllImport(Win32Libraries.ComCtl32, CharSet = CharSet.Auto, SetLastError = true)]
internal static extern void TaskDialog(
          IntPtr hwndParent,
          IntPtr hInstance,
          string pszWindowTitle,
          string pszMainInstruction,
          string pszContent,
          TaskDialogButtons dwCommonButtons,
          string pszIcon,
          [In,Out] ref int pnButton);

/* ... */


public enum TaskDialogIcon
{
   Blank = 100,
   Warning,
   Question,
   Error,
   Information,
   BlankAgain,
   Shield
}
Wenn ich aber, ähnlich wie bei Delphi, den Icon-Wert in einen String umwandle, dann erscheint der Dialog nicht. Nur wenn ich null nehme, klappt es. Anbei mal der Code der Show()-Methode mit allen Parametern, weil hier der eigentliche Aufruf des Dialogs drin steckt:
Code:
public static TaskDialogResult Show(IntPtr hwndParent, IntPtr hInstance,
   string content, string dialogTitle, string mainInstruction,
   TaskDialogButtons buttons, TaskDialogIcon icon)
{
   if (!SupportedOS.IsWindowsVistaOrHigher())
   {
      throw new NotSupportedException
         ("Your operating system does not support this dialog.");
   }
   int dialogResult = 0;

   NativeMethods.TaskDialog
      (hwndParent,
       hInstance,
       dialogTitle,
       mainInstruction,
       content,
       buttons,
       GetIconValue(icon),
       ref dialogResult);
   return (TaskDialogResult)dialogResult;
}

static string GetIconValue(TaskDialogIcon icon)
{
//   return ((int)icon).ToString();
   return null;
}
Die Funktion "GetIconValue" würde also den numerischen Wert von TaskDialogIcon liefern. Etwa 104 für Information. Also in etwa nach dem Prinzip, was
MAKEINTRESOURCEW(104) bei der Delphi-Version machen würde. Aber das klappt nicht. Wo liegt mein Denkfehler?
  Mit Zitat antworten Zitat