|
김정훈 님이 쓰신 글 :
: FAQ에서 보고 CM_MOUSEENTER를 받는 함수를
: 만들었습니다.
:
:
: MESSAGE void TForm1::OnMouseEnter(TMessage &msg)
: {
: POINT lpPoint;
: GetCursorPos(&lpPoint);
: Image2->Left = lpPoint.x - Form1->Left;
: Image2->Top = lpPoint.y - Form1->Top;
: Label3->Caption = lpPoint.x - Form1->Left;
: Label4->Caption = lpPoint.y - Form1->Top;
: Image2->Picture=NULL;
: }
: 마우스가 폼안에 있으면 그림이 마우스를 따라다니면서
: 마우스 좌표가 표시되는건데.
:
: 이게 실시간으로 표시가 되는게 아니라
: 뚝뚝 끊기거나 화면 밖으로 나갔다가 들어와야 되네요;
:
: 그 OnPaint로 계속 안뿌려져서 그런가요?;;
: 저게 MouseMove에 쓸때는 정상적으로 됐거든요?
: 근데 저기에선 안되네요
:
: 어떻게 해야될까요?
OnPaint 문제가 아니라
OnEnter 는 마우스가 컨트롤 안에 들어오는 때 한번만 발생합니다.
그래서 컨트롤(폼)을 나갔다 들어오거나 일정 시간이 지나야 다시 발생하는 것이지요
여러가지 생각해 봤는데요
아무래도 OnMouseMove 에서 캐치하는 게 제일 나을 듯 싶습니다.
아니면 마우스가 컨트롤 바깥으로 나가는 메세지도 캐치한 다음
bool isEnter; 로 선언하셔서 들어올 경우에만
OnMouseMove 에서 처리 해 주는 게 좋겠지요
아 그리고 이미지를 따라 다니게 하는 것이라면
아무스 위치에 따라 이미지 출현 위치를 잘 생각해야 겠죠? ^-^
폼 끝부분에 도달해서 이미지가 폼의 크기제한에 짤리는 경우가 있으면 안되니깐요.
대략 다음과 같은 방법으로 표시하시면 됩니다.
int MX,MY; // 마우스 좌표
TImage *Img;
...
// 이미지 출현 위치 계산 부분
if(Form->Left + Form->Width - Img->Width < MX)
{
Img->Left = MX - Form->Left - Img->Width;
}
else Img->Left = MX - Form->Left;
....
뭐 대충 이런 식이 되겠네요.
그럼 즐프하세요~
|