我正在用c ++开发一个自定义窗口边框,我想这就是它的本质。我不知道我是否以正确的方式做到这一点,但我很高兴知道如何通过位图制作一个可拖动的窗口。
我在photoshop中制作了一个位图栏并添加到客户区,我希望能够通过位图拖动它。目前,您可以使用以下代码将其拖动到客户区的任何位置:
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 :(得分:0)
我没试过这个,但类似的东西应该有效:
isDragging
并将其设置为false。WM_LBUTTONDOWN
的处理程序中,如果isDragging
为false并且鼠标位于位图栏上(使用PtInRect
),请将isDragging
设置为true,并限制通过调用ClipCursor
将光标移动到位图的矩形中。保存光标相对于窗口左上角的位置。WM_MOUSEMOVE
的处理程序中,如果isDragging
为真,则移动窗口(调用MoveWindow
或SetWindowPos
)以恢复其相对于光标的位置。 WM_LBUTTONUP
的处理程序中,如果isDragging
为true,则将其设置为false,并通过适当调用ClipCursor
来释放游标。(始终考虑客户坐标和屏幕坐标之间的差异。)