C ++ Builder XE, Передача и обработка пользовательских сообщений
Я пытаюсь узнать, как передавать и обрабатывать сообщения в приложении VCL форм. Я копался в интернете в течение некоторого времени и нашелэтот
Предположим, у меня есть индикатор выполнения, который я хочу обновить с помощью сообщений (кстати, если есть какой-либо другой лучший способ, мне не терпится его услышать) Итак, я сделал простой проект для тестирования материала и вот что у меня есть (RECEIVER - это имя формы с индикатором выполнения, SENDER - кнопка, используемая для отправки сообщений, updBar - это функция обновления индикатора выполнения, а 123456 - это идентификатор сообщения, которое я хочу использовать): unit1.cpp:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TRECIEVER *RECIEVER;
//---------------------------------------------------------------------------
__fastcall TRECIEVER::TRECIEVER(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TRECIEVER::barUPD(TMessage& msg){
BAR->StepIt();
}
//---------------------------------------------------------------------------
void __fastcall TRECIEVER::SENDERClick(TObject *Sender)
{
//BAR->StepIt();
PostMessage(FindWindow(0,(wchar_t*)"RECIEVER"),123456,0,0);
}
Unit1.h:
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ComCtrls.hpp>
//---------------------------------------------------------------------------
class TRECIEVER : public TForm
{
__published: // IDE-managed Components
TButton *SENDER;
TProgressBar *BAR;
void __fastcall SENDERClick(TObject *Sender);
private: // User declarations
public: // User declarations
void __fastcall barUPD(TMessage& msg);
__fastcall TRECIEVER(TComponent* Owner);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(123456,TMessage,barUPD);
END_MESSAGE_MAP(TForm)
};
//---------------------------------------------------------------------------
extern PACKAGE TRECIEVER *RECIEVER;
//---------------------------------------------------------------------------
#endif
Как видите, я определил как функцию обработки, так и соответствующий обработчик сообщения для моего сообщения. Но когда я просматриваю его через отладчик (после отправки сообщения с помощью кнопки), точка выполнения никогда не переходит ни в мою функцию, ни в строку обработчика. заранее спасибо