这就是我想做的事情。我在WM_CREATE
上加载了这样的Bitmap图像g_hbmCar = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_CAR));
接下来是捕捉是否按下鼠标左键以及箭头是否在图像&得到这样的坐标(如果我是对的):
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;
但这似乎不起作用:(任何帮助都会受到赞赏。谢谢!
答案 0 :(得分:2)
在您的代码执行大小写WM_LBUTTONDOWN时,不会发生WM_MOUSEMOVE。您需要将操作分为3个步骤。
(1)如果点击在图像限制范围内,则调用SetCapture。这样可以确保您获得所有后续WM_MOUSEMOVE消息,即使鼠标移动到窗口外也是如此。从WM_LBUTTONDOWN处理程序返回。
(2)在WM_MOUSEMOVE处理程序中,如果GetCapture指示您已捕获鼠标,则执行绘制。或者,简单地使用InvalidateRect可能更容易也更好,然后让后续的WM_PAINT绘制对象。
(3)在WM_LBUTTONUP执行ReleaseCapture。