2014-03-26 7 views
0

그래서 제가하고 싶은 것입니다. 나는드래그 앤 드롭과 같이 비트 맵 이미지를 마우스로 움직입니다.

g_hbmCar = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_CAR)); 

다음 마우스 왼쪽 버튼을 누르면 잡을 것입니다 WM_CREATE에서이 같은 비트 맵 이미지를로드 및 화살표 이미지에있는 경우 (내가 옳다 경우) & GET은 다음과 같이 좌표

case WM_LBUTTONDOWN: 
       {RECT rcClient; 
// check if the cursor is within the image.x limits 
        if(LOWORD(lParam)>=g_carInfo.x && LOWORD(lParam)<=g_carInfo.x+g_carInfo.width) 
        { 
//check if the cursor is within the image.y limits 
         if(HIWORD(lParam)<=g_carInfo.y && HIWORD(lParam) >= g_carInfo.y + g_carInfo.height) 
         { 
          case WM_MOUSEMOVE : 
           { 
        if (wParam & MK_LBUTTON) 
         { 
         HDC hdc = GetDC (hwnd) ; 
         g_carInfo.x +=LOWORD (lParam); 
         g_carInfo.y += HIWORD(lParam); 
         UpdateCar(&rcClient,&g_carInfo); 
         DrawCar(hdc,&rcClient,hbr, g_hbmCar, g_hbmMask,g_carInfo); 
         ReleaseDC (hwnd, hdc) ; 
         } 
           } 
         break; 

         } 
        } 
       } break; 

는하지만, 이것은 어떤 도움을 주시면 감사하겠습니다 :(작동하는 것 같다하지 않습니다. 감사합니다! 당신의 코드의 경우 WM_LBUTTONDOWN을 실행하는 동안 WM_MOUSEMOVE가 발생하지 않습니다

답변

2

경우. 당신은 3 단계로까지 작업을 중단해야합니다.

(1) 이미지 제한 내에서 클릭이 발생하면 SetCapture를 호출하십시오. 이렇게하면 마우스가 윈도우 외부로 이동하더라도 모든 WM_MOUSEMOVE 메시지를 받게됩니다. WM_LBUTTONDOWN 핸들러로부터의 복귀.

(2) WM_MOUSEMOVE 처리기에서 GetCapture가 마우스 캡처를 나타냈다면 그림을 그립니다. 또는 단순히 InvalidateRect를 사용하는 것이 더 쉽고 더 좋을 것입니다. 그런 다음 후속 WM_PAINT가 개체를 페인트하게하십시오.

(3) WM_LBUTTONUP에서 ReleaseCapture를 수행하십시오.

+0

답변 주셔서 감사합니다.하지만 다른 방법으로 해결했습니다. –