可以通过位图拖动的C ++窗口

时间:2012-11-19 22:01:45

标签: c++ winapi visual-studio-2012

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

看起来像这样:

window

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

1 个答案:

答案 0 :(得分:0)

我没试过这个,但类似的东西应该有效:

  1. 声明一个名为eg的布尔值isDragging并将其设置为false。
  2. WM_LBUTTONDOWN的处理程序中,如果isDragging为false并且鼠标位于位图栏上(使用PtInRect),请将isDragging设置为true,并限制通过调用ClipCursor将光标移动到位图的矩形中。保存光标相对于窗口左上角的位置。
  3. WM_MOUSEMOVE的处理程序中,如果isDragging为真,则移动窗口(调用MoveWindowSetWindowPos)以恢复其相对于光标的位置。
  4. WM_LBUTTONUP的处理程序中,如果isDragging为true,则将其设置为false,并通过适当调用ClipCursor来释放游标。
  5. (始终考虑客户坐标和屏幕坐标之间的差异。)