SendMessage с возвращаемым значением TDM_CLICK_BUTTON всегда ноль

StackOverflow https://stackoverflow.com/questions/3077387

Вопрос

В моем приложении C # я пытаюсь использовать TDM_CLICK_BUTTON Сообщение Нажмите кнопку в TaskDialog. Это в основном работает просто хорошо. Что я ожидаю, произойдет, происходит. Я даже получаю TDN_BUTTON_CLICKED уведомление.

Но документация говорит, что возвращаемая стоимость SendMessage было бы ненулевым, если вызов преуспевает. Но это всегда возвращает нулю для меня.

Это мой код:

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 всегда равен нулю, когда исключение брошено. Какой был бы еще один показатель, что все в порядке.

SendMessage объявляется в моем коде, как это:

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

Документация неверна или я использую сообщение неправильно?

Это было полезно?

Решение

Поэтому я взял образец TaskDialog C ++ Windows SDK SDK и попробовал это сообщение. Возвратная стоимость SendMessage остается ноль всегда.

Я заметил, что TDN_BUTTON_CLICKED Уведомление всегда будет отправлено (даже если идентификатор кнопки не существует). Если кнопка существует или не влияет на SendMessage возвращаемое значение.

Затем я подозревал, что возвращаемое значение для этого уведомления может иметь эффект, но независимо от того, что я возвращаю из обратного вызова (TRUE/FALSE/S_OK/42), мой SendMessage Возвращаемое значение остается ноль.

Итак, учитывая, что я не нашел никакого способа сделать это неудачу и / или вернуть ненулевую ценность, могу только предположить, что документация неверна.

Редактировать: я получил ответ на мою обратную связь документации, которую я отправил несколько дней назад. Оказывается, документация действительно неверна. Возвращаемое значение должно быть проигнорировано.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top