Question

Dans mon application C # Je suis en train d'utiliser le message de TDM_CLICK_BUTTON cliquer sur un bouton dans un TaskDialog. Cela fonctionne très bien en fait. Ce que je pense arriver, arrive. Je reçois même la notification de TDN_BUTTON_CLICKED.

Mais la documentation dit, que la valeur de retour de SendMessage serait non nulle si l'appel réussit. Mais elle retourne toujours zéro pour moi.

Ceci est mon code:

public void ClickButton( int buttonId ) {
  bool success = UnsafeNativeMethods.SendMessage(
    WindowHandle,
    (uint)UnsafeNativeMethods.TASKDIALOG_MESSAGES.TDM_CLICK_BUTTON,
    (IntPtr)buttonId,
    IntPtr.Zero ) != IntPtr.Zero;
  if( !success ) {
    int lastWin32Error = Marshal.GetLastWin32Error();
    throw new Win32Exception( lastWin32Error, "SendMessage for TDM_CLICK_BUTTON failed." );
  }
}

lastWin32Error est toujours égale à zéro lorsque l'exception est levée. Ce qui serait un autre indicateur que tout va bien.

SendMessage est déclaré dans mon code comme ceci:

[DllImport( "user32.dll", SetLastError = true )]
internal static extern IntPtr SendMessage( IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam );

La documentation est incorrecte ou que j'utilise le message de façon incorrecte?

Était-ce utile?

La solution

Je pris l'échantillon C ++ SDK Windows TaskDialog et essayé ce message là-dedans aussi. La valeur de retour de SendMessage reste toujours égale à zéro.

Je remarque qu'une notification TDN_BUTTON_CLICKED sera toujours envoyé (même si l'identifiant du bouton n'existe pas). Si le bouton existe ou non n'a pas d'effet sur la valeur de retour de SendMessage.

Alors je me doutais que la valeur de retour de cette notification pourrait avoir un effet, mais peu importe ce que je reviens du rappel (TRUE/FALSE/S_OK/42), ma SendMessage valeur de retour reste zéro.

Alors, étant donné que j'ai trouvé aucun moyen de faire échouer cette et / ou de renvoyer une valeur non nulle, je ne peux que supposer que la documentation est incorrecte.

edit: Je suis une réponse à mes commentaires de la documentation que j'ai envoyé il y a quelques jours. Il s'avère que la documentation est en effet incorrect. La valeur de retour doit être ignoré.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top