Учись программированию на C++ Builder бесплатно!
Содержание[Скрыть]

Функция SendMessage

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

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

При прямой передаче указанного сообщения происходит обращение сразу к процедуре окна. Так можно избежать очередь и получить мгновенную реакцию на сообщение.

Синтаксис функции SendMessage

SendMessage(
HWND hwnd, //Дескриптор окна, которому будет передано сообщение
UINT Msg, //Сообщение
WPARAM wParam, //Первый параметр сообщения
LPARAM lParam //Второй параметр сообщения
);

Параметры функции SendMessage

  • hWnd – дескриптор окна, для которого передаётся сообщение. Если этому параметру указать значение равное HWND_BROADCAST, то сообщение будет передаваться всем окнам системы верхнего уровня, включая невидимые и недоступные, кроме, конечно, дочерних.
  • Msg – задаёт сообщение, которое будет передано окну.
  • wParam и IParam – содержать дополнительную информацию передаваемого сообщения. Если они не нужны, можно указать пустые значения.

Пример

Memo1->SelLength = 0;
Memo1->SetFocus();
Label1->Caption = SendMessage(Memo1->Handle, EM_LINEFROMCHAR, Memo1->SelStart, 0)+1;

Функция SendMessage

Функция PostMessage

Функция PostMessage схожа с SendMessage, но имеет некоторое отличие. Она помещает сообщение в очередь и, не дожидаясь окончания обработки, сразу возвращается. Если необходимо передать срочное сообщение окну, то в этом случае функция PostMessage не подойдёт. Но есть и преимущество – на время обработки сообщения не блокирует вызвавшее приложение.

Функция PostMessage при успешном завершении возвращает ненулевое значение, в противном случае нуль (аварийное завершение). Чтобы получить сообщение ошибки следует установить вызов функции GetLastError.

Синтаксис функции PostMessage

PostMessage(
HWND hWnd, //Дескриптор окна, которому будет передано сообщение
unsigned int Msg, //Сообщение
WPARAM wParam, //Первый параметр сообщения
LPARAM IParam //Второй параметр сообщения
);

Параметры функции PostMessage

Параметры функции PostMessage аналогичны SendMessage. Если hWnd = NULL, то в этом случае сообщение становится в конец очереди сообщений текущего процесса.

Пример

PostMessage(Form1->Handle, WM_CLOSE, 0, 0); //Сообщает окну закрыться

Функция Perform

Функция Perform аналогична выше приведённым, но в отличии от них сообщение посылается напрямую непосредственно окну.

Синтаксис функции Perform

Perform(
unsigned int Msg, //Сообщение
WPARAM wParam, //Первый параметр сообщения
LPARAM IParam //Второй параметр сообщения
);

Пример

Form1->Perform(WM_CLOSE, 0, 0); //Сообщает окну закрыться
Поделиться