Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > SendMessage: возвращяемое значение


Автор: Alca 24.7.2009, 17:38
Что-то я не нашел в MSDN, что должна возвращять эта функция при успешном и при неудачном выполнении.
Как узнать какое значение говорит о том, что функция выполнилась не удачно?
Остается только ::GetLastError()?
http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx

Автор: SVN74 24.7.2009, 17:44
Если  ( != 0 )  - неудача

Автор: S.A.G. 24.7.2009, 17:48
Alca, попробуй отправить сообщение с заведомо неправильными параметрами и посмотри на возвращаемое значение.

Автор: Alca 24.7.2009, 17:53
Цитата

Если  ( != 0 )  - неудача

нифига подобного
Цитата

Alca, попробуй отправить сообщение с заведомо неправильными параметрами и посмотри на возвращаемое значение.

Те сообщения, которые отрабатываются правильно могут возвращять как нуль так и не нуль.
::GetLastError() всегда выдает "0".
 smile

Добавлено через 5 минут и 27 секунд
Код

BOOL bSendMessage(UINT uiMsg, WPARAM wParam, LPARAM lParam) {
    assert(NULL != _m_hWnd);

    BOOL bRes = FALSE;

    bRes = (BOOL)::SendMessage(_m_hWnd, uiMsg, wParam, lParam);
    assert(TRUE/*FALSE*/ == bRes); 
    //DWORD le = ::GetLastError();

    return bRes;
}

Автор: SVN74 24.7.2009, 18:04
Цитата(Alca @  24.7.2009,  17:53 Найти цитируемый пост)
Цитата

Alca, попробуй отправить сообщение с заведомо неправильными параметрами и посмотри на возвращаемое значение.



Те сообщения, которые отрабатываются правильно могут возвращять как нуль так и не нуль.
::GetLastError() всегда выдает "0".
 

Правильно, GetLastError не связан с SendMessage, - тут только бывает два ответа 0 или ...
Я же приводил недавно в разделе (Builder) рабочий пример...

Автор: Alca 24.7.2009, 19:26
Так, что шансов нет?

Автор: GremlinProg 24.7.2009, 23:12
Цитата(Alca @  24.7.2009,  19:38 Найти цитируемый пост)
Что-то я не нашел в MSDN, что должна возвращять эта функция при успешном и при неудачном выполнении

это функция просто передает сообщение в процедуру окна,
результат зависит от того, что возвращает эта процедура окна

соответственно, если происходит какая-либо ошибка в процедуре окна,
то там она и фиксируется

каждый оконный класс вправе определять для себя любые возвращаемые значения,
и, как правило, это документируется

к примеру: у list box'а сообщения в основном возвращаются с индексами списка,
а LB_ERR на возврате определяет, что произошла ошибка

обычно в документации к сообщениям пишется, может-ли вернуться ошибка, и в чем она выражается
это и есть результат, который вернется из SendMessage

просто смотри в секцию Return Value,
примеры:
Цитата(MSDN)

.....
Return Value
Returns nonzero if the operation was successful, or zero otherwise.
.....
Return Value
Returns the handle to the edit control if successful, or NULL otherwise.
.....
Return Value
Returns TRUE if successful, or FALSE otherwise.
.....

Автор: Alca 24.7.2009, 23:35
GremlinProg, спасибо  smile 

Автор: Jkyskienuh 12.12.2020, 06:44
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)