winapi — окно C ++, перетаскиваемое по растровому изображению

Я разрабатываю пользовательскую границу окна в 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);

и это выглядит так:

окно

Вы можете увидеть панель вверху, и я хочу, чтобы ее можно было перетаскивать.

0

Решение

Я не пробовал это, но что-то подобное должно работать:

  1. Объявите логическое значение, называемое, например, isDragging и установите его в ложь.
  2. В обработчике WM_LBUTTONDOWN, если isDragging имеет значение false и мышь находится над панелью растровых изображений (используйте PtInRect), задавать isDragging в true, и поместите курсор в прямоугольник растрового изображения, вызвав ClipCursor, Сохранить положение курсора относительно верхнего левого угла окна.
  3. В обработчике WM_MOUSEMOVE, если isDragging верно, переместить окно (вызов MoveWindow или же SetWindowPos), чтобы восстановить его положение относительно курсора.
  4. В обработчике WM_LBUTTONUP, если isDragging true, установите его в false и отпустите курсор, вызвав ClipCursor соответственно.

(Всегда учитывайте разницу между клиентскими координатами и экранными координатами.)

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector