Я разрабатываю пользовательскую границу окна в C ++, ну, я думаю, что это так. Я не знаю, правильно ли я делаю это или нет, но я был бы признателен, если бы знал, как сделать перетаскиваемое окно с помощью растрового изображения.
есть панель растровых изображений, которую я сделал в фотошопе и добавил в клиентскую область, и я хочу иметь возможность перетаскивать ее только за растровое изображение. В настоящее время вы можете перетащить его в любое место клиентской области, используя этот код:
case WM_NCHITTEST: {
LRESULT hit = DefWindowProc(hWnd, message, wParam, lParam);
if(hit == HTCLIENT) hit = HTCAPTION;
return hit;
}
break;
и я нарисовал растровое изображение, используя этот код в разделе рисования:
DrawBitmap(hdc,"header-bar-1.bmp", 2, 4);
и это выглядит так:
Вы можете увидеть панель вверху, и я хочу, чтобы ее можно было перетаскивать.
Я не пробовал это, но что-то подобное должно работать:
isDragging
и установите его в ложь.WM_LBUTTONDOWN
, если isDragging
имеет значение false и мышь находится над панелью растровых изображений (используйте PtInRect
), задавать isDragging
в true, и поместите курсор в прямоугольник растрового изображения, вызвав ClipCursor
, Сохранить положение курсора относительно верхнего левого угла окна.WM_MOUSEMOVE
, если isDragging
верно, переместить окно (вызов MoveWindow
или же SetWindowPos
), чтобы восстановить его положение относительно курсора. WM_LBUTTONUP
, если isDragging
true, установите его в false и отпустите курсор, вызвав ClipCursor
соответственно.(Всегда учитывайте разницу между клиентскими координатами и экранными координатами.)
Других решений пока нет …