C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
SendMessage, Не могу получить своё же сообщение
Schumi
Отправлено: 24.10.2004, 17:57


Машинист паровоза

Группа: Участник
Сообщений: 206



Пробую простенький пример:кидаю на форму кнопку,и по нажатию посылаю сообщение SendMessage(Handle,30000,0,0).
Handle — либо окна,либо приложения.
А в обработчике ApplicationEvents-OnMessage ловлю все сообщения.И балалайка мне,а не сообщение.В смысле куча сообщений идёт,но не моё с message=30000.
В чём причина,объёсните неграмотному?
Doga
Отправлено: 25.10.2004, 11:44


Мастер участка

Группа: Участник
Сообщений: 575



А так пробовали?

CODE

BEGIN_MESSAGE_MAP
   VCL_MESSAGE_HANDLER(...)
END_MESSAGE_MAP(TForm)


Или WindProc переопределить?
Schumi
Отправлено: 25.10.2004, 18:19


Машинист паровоза

Группа: Участник
Сообщений: 206



Не мог бы поподробней оба варианта
Doga
Отправлено: 25.10.2004, 19:31


Мастер участка

Группа: Участник
Сообщений: 575



ВАРИАНТ 1]

MyForm.h

CODE

//---------------------------------------------------------------------------
#define WM_MY_MSG (WM_USER+0x0100)

class TMyForm : public TForm
{
private: // User declarations
 void __fastcall HandleMyMsg(TMessage& Msg);

BEGIN_MESSAGE_MAP
      VCL_MESSAGE_HANDLER(WM_MY_MSG , TMessage, HandleMyMsg)
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------


MyForm.cpp

CODE

//---------------------------------------------------------------------------
void __fastcall TMyForm::HandleMyMsg(TMessage& Msg)
{
 //Msg — это и есть Ваше сообщение (WM_MY_MSG)
 //...
}
//---------------------------------------------------------------------------



ВАРИАНТ 2


MyForm.h

CODE

//---------------------------------------------------------------------------
#define WM_MY_MSG (WM_USER+0x0100)

class TMyForm : public TForm
{
private: // User declarations
 void __fastcall MyWndProc(TMessage &Msg);
};
//---------------------------------------------------------------------------


MyForm.cpp

CODE

//---------------------------------------------------------------------------
//Конструктор формы
__fastcall TMyForm::TMyForm(TComponent* Owner) : TForm(Owner)
{
 //Переназначаем обработчик сообщений окна
 WindowProc = MyWndProc;
}
//---------------------------------------------------------------------------
void __fastcall TMyForm::MyWndProc(TMessage& Msg)
{
 if (Message.Msg == WM_MY_MSG)
 {
   //Это и есть Ваше сообщение
   //...
 }
 else
 {
   //Обработчик сообщений окна по умолчанию
   WndProc(Msg);
 }
}
//---------------------------------------------------------------------------



Вот как то так... smile.gif
Schumi
Отправлено: 26.10.2004, 18:30


Машинист паровоза

Группа: Участник
Сообщений: 206



Разобрался,просто вместо SendMessage использовал PostMessage.
Но есть другой вопрос: можно ли отправить сообщение не форме/приложению,а некоторому контролу на форме,и соответственно его затем получить?
Konstantine
Отправлено: 27.10.2004, 08:44


Мастер участка

Группа: Модератор
Сообщений: 545



сообщения принимаются не приложением и не контролом, а ОКНОМ.
Guest
Отправлено: 27.10.2004, 09:09


Не зарегистрирован







Контрол это и есть окно в терминах API (не путать с формой).
olegenty
Отправлено: 28.10.2004, 09:09


Ветеран

Группа: Модератор
Сообщений: 2412



резюме — шлёшь мессагу на Handle "контрола", он её и отловит...

Вернуться в Вопросы программирования в C++Builder