|
메세지를 잡아서 처리하는 방법보다 간단한 방법을 소개해 드리겟습니다.
요는 Image와 Shape의 Mouse 이벤트에 같은 함수를 걸어놓는것입니다.
//-------------------
TImage의 OnMouseMove . OnMouseDown,OnMouseUp ... 등의 이벤트함수를
TShape의 OnMouseMove . OnMouseDown,OnMouseUp 이벤트에 연결하면 됩니다.
그러니까...
TImage의 이벤트 함수가..
MouseMove가 Image1OnMouseMove
MouseDown가 Image1OnMouseDown
MouseUp가 Image1OnMouseUp 이라고 한다면
TShape 형 객제가 shape1이 있다면
shape1->MouseMove=Image1OnMouseMove ;
shape1->MouseDown=Image1OnMouseDown;
shape1->MouseUp=Image1OnMouseUp ;
위와 같이 하시면
shape1 에서 나는 Mouse Down,Move,Up 이벤트는
Image1 에서와 동일한 함수에서 돌아갑니다.
단 Mouse 위치좌표 X,Y는 다릅니다.
코딩에서 위와같이 Event 동작함수를 바꿔줘도 되구요
DesignTime때 Object-Inspector에서 관련함수를 변경해주시면 됩니다.
X,Y좌표도 Image1에서 위치랑 동일하게 하고자 한다면...
방법1] 관련함수(Image1MouseMove 함수등...)안에서
TObject *Sender가 TImage인지 TShape인지 확인한후
Sender가 TShape이면 X,Y좌표에다가 shape1의 shape1->Left , shape1->Top만큼 더해주면 되겠죠
void __fastcall TForm1::Image1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
if( Sender->ClassName()=="TShape")
{
X+=Shape1->Left;
Y+=Shape1->Top;
}
//처리 로직
}
//---------------------------------------------------------------------------
방법2] 방법1과 비슷한데 TShape함수를 Image1의 함수로 바꾸지 말구요..
그냥 shape1MouseMove등의 함수에서 X,Y좌표에다가 shape1의 shape1->Left , shape1->Top만큼 더한후
TImage1의 동일함수를 호출합면 됩니다.
void __fastcall TForm1::Shape1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
Image1MouseMove(Image1,Shift,X+Shape1->Left,Y+Shape1->Top);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
//
}
//---------------------------------------------------------------------------
이형도 님이 쓰신 글 :
: 즐거운 주말인데 비가 오네요.
: 전 밀린 코딩하느라 주말도 반납하고 있습니다. ^^;
: 윈도우 프로그래밍 초보라서 여러모로 삽질 중입니다.
: 제가 궁금한 점은
: TImage에 TShape로 작은 사각형(트래커로 사용하고 있습니다.) 을 그렸습니다. 나중에 이 Shape에서 마우스를 누르고 도형 크기를 변경하려고 하는데요. 마우스 이벤트가 TShape에서 처리 되더라구요.
: TShape에서 마우스가 눌렸을 때 그 처리를 TImage에서 하고 싶은데요. 그럴려면 메시지를 가로채야 할 것 같은데요. 이거 어떻게 하나요? 혹시 이런걸 메시지 후킹이라고 하나요?
: 어디서 들어본 것 같은데 어떻게 처리해야 할지 간단한 예제나 방법 좀 알려 주세요
|