0

我正在用 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);

它看起来像这样:

窗户

您可以看到顶部的栏,这是我希望能够拖动它的地方。

4

1 回答 1

0

我还没有尝试过,但类似的东西应该可以工作:

  1. 声明一个名为 eg 的布尔值isDragging并将其设置为 false。
  2. 在 的处理程序中WM_LBUTTONDOWN,如果isDragging为 false 并且鼠标在位图栏上(使用PtInRect),设置isDragging为 true,并通过调用将光标限制在位图的矩形中ClipCursor。保存光标相对于窗口左上角的位置。
  3. 在 的处理程序中WM_MOUSEMOVE,如果isDragging为真,则移动窗口(调用MoveWindowSetWindowPos)以恢复其相对于光标的位置。
  4. 在 的处理程序中WM_LBUTTONUP,如果isDragging为真,则将其设置为假,并通过ClipCursor适当的调用释放光标。

(始终考虑客户端坐标和屏幕坐标之间的差异。)

于 2012-11-19T22:26:41.433 回答