|
일단 틀린 이유는..
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_INITDIALOG, , OnInitDialog)
END_MESSAGE_MAP(TForm)
가 아니고
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_INITDIALOG, TMessage, OnInitDialog);
END_MESSAGE_MAP(TForm);
이런 식으로 하셔야 합니다.
첫번째 인자는 잡아낼 메시지
두번째는 C++ Builder에서 매핑할 메시지클래스명(그냥 TMessage로 하면 일단 다 잡아냅니다. TWM으로 시작하는 각종 메시지클래스들을 도움말에서 찾아보시면 많이 도움이 되실겁니다)
세번째는 그걸 다룰 메시지 핸들러의 이름입니다.
On...로 시작하는 것들은 주로 VCL의 이벤트 핸들러들이고 이들은 메시지 핸들러랑은 구조가 다릅니다.
void __fastcall OnInitDialog(TMessage &Msg);
이렇게 선언해서 직접 구현하시면 됩니다.
보통은 이런 메시지 핸들러는 WMInitDialog 와 같이 WM으로 시작하는 이름을 붙이는 경우가 많습니다. 굳이 이벤트까지 뽑아내고자 할 때는 이런 식으로 합니다.
class TMyForm : public TCustomForm
{
private:
TNotifyEvent FOnInitDialog;
......
protected:
void __fastcall WMInitDialog(TMessage &Msg);
.........
__published:
__property TNotifyEvent OnInitDialog = {read=FOnInitDialog, write=FOnInitDialog};
.......
public:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_INITDIALOG, TMessage, WMInitDialog);
END_MESSAGE_MAP(TForm);
......
}
뭐 이렇게 있다면..
void __fastcall TMyForm::WMInitDialog(TMessage &Msg)
{
// 내가 원하는 처리를 하고
// 이벤트를 콜 하고자 할 때는
if (FOnInitDialog)
FOnInitDialog(this);
}
MFC랑은 좀 다를겁니다. 아마. 일단 VCL의 동작 흐름을 파악하시는게 가장 급선무로 보이는군요..
이 곳 질답들을 검색해 보시고 하면 좋은 결과 얻으실 수 있을겁니다.
|