Domanda

Nel mio C # Sto cercando di utilizzare il messaggio TDM_CLICK_BUTTON fare clic su un pulsante in un TaskDialog. Questo funziona sostanzialmente bene. Quello che mi aspetto che accada, succede. Ricevo anche la notifica TDN_BUTTON_CLICKED.

Ma la documentazione dice, che il valore di ritorno di SendMessage sarebbe diverso da zero se la chiamata riesce. Ma restituisce sempre zero per me.

Questo è il mio codice:

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 è sempre zero quando viene generata l'eccezione. Che sarebbe un altro indicatore che tutto va bene.

SendMessage è dichiarata nel mio codice in questo modo:

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

E 'la documentazione non corretta o sto utilizzando il messaggio in modo non corretto?

È stato utile?

Soluzione

Così ho preso il campione C ++ SDK di Windows TaskDialog e provato questo messaggio in là pure. Il valore restituito SendMessage rimane a zero sempre.

ho notato che una notifica TDN_BUTTON_CLICKED verrà sempre inviato (anche se il pulsante ID non esiste). Se il pulsante esiste o no non ha alcun effetto sul valore di ritorno SendMessage.

Poi ho sospettato, che il valore di ritorno per la notifica che potrebbe avere un effetto, ma non importa quello che io ritorno dal callback (TRUE/FALSE/S_OK/42), il mio valore di ritorno SendMessage rimane zero.

Quindi, dato che ho trovato alcun modo per rendere questo fallire e / o restituire un valore diverso da zero, posso solo supporre che la documentazione non è corretta.

modifica: ho ricevuto una risposta alla mia reazione documentazione ho inviato qualche giorno fa. Si scopre che la documentazione è davvero corretto. Il valore di ritorno deve essere ignorato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top