перехватить сообщения
От: lightix  
Дата: 24.09.03 13:04
Оценка:
Подскажите как перехватить сообщения и обработать их с помощью метода 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;
}
Re: перехватить сообщения
От: ikerk  
Дата: 24.09.03 13:32
Оценка:
Все проше :
см. [virtual void __fastcall Dispatch(void *Message);]
Re[2]: перехватить сообщения
От: lightix  
Дата: 25.09.03 05:42
Оценка:
Здравствуйте, ikerk, Вы писали:

I>Все проше :

I> см. [virtual void __fastcall Dispatch(void *Message);]
А можно поподробнее? Как применить ее в моем случае?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.