Подскажите как перехватить сообщения и обработать их с помощью метода DoMessage? Подозреваю что это нужно сделать в конструкторе класса, но как?
TMenuItem2.h
class TMenuItem2: public TMenuItem
{
private:
TMouseEvent FOnMouseDown;
TShiftState ShiftState();
protected:
virtual void __fastcall DoMessage(TMessage &Message);
virtual void __fastcall DoMouseDown(TMouseButton Button, TShiftState Shift, int X, int Y);
public:
__fastcall TMenuItem2(TComponent* Owner);
__fastcall ~TMenuItem2();
__published:
__property TMouseEvent OnMouseDown = {read=FOnMouseDown,write=FOnMouseDown};
};
TMenuItem2.cpp
__fastcall TMenuItem2::TMenuItem2(TComponent* c) : TMenuItem(c)
{
}
__fastcall TMenuItem2::~TMenuItem2()
{
}
void __fastcall TMenuItem2::DoMessage(TMessage &Message)
{
TPoint point;
TShiftState shift;
switch(Message.Msg)
{
case WM_LBUTTONDOWN:
shift = ShiftState();
shift << ssLeft;
GetCursorPos(&point);
DoMouseDown(mbLeft, shift, point.x, point.y);
break;
}
TComponent::Dispatch(&Message);
}
//---------------------------------------------------------------------------
void __fastcall TMenuItem2::DoMouseDown(TMouseButton Button, TShiftState Shift,
int X, int Y)
{
if (FOnMouseDown)
FOnMouseDown(this, Button, Shift, X, Y);
}
//----------------------------------------------------------------------------
TShiftState TMenuItem2::ShiftState()
{
TShiftState result;
if (GetKeyState(VK_SHIFT) < 0)
result << ssShift;
if (GetKeyState(VK_CONTROL) < 0)
result << ssCtrl;
if (GetKeyState(VK_MENU) < 0)
result << ssAlt;
return result;
}