1

我有一个CView用作垂直堆叠的几个 Ctrl 的占位符,以便占据所有可用空间。我想做的是用鼠标抓住一个水平边界并将其向上或向下拖动以调整 Ctrl 高度。

问题是子 Ctrl 的CView拦截鼠标消息而不是CView父窗口(WM_LBUTTONDOWNWM_MOUSEMOVE)。Ctrl 还为不相关的编辑要求处理这些消息。

任何人都能够提供建议或提供有关此尺寸/编辑要求的可能解决方案的参考吗?这种情况有点类似于 Visual Studio 中的资源编辑器。只有我希望在现场环境中进行编辑。

4

1 回答 1

1

我认为这可以很容易地完成如下:

  • 在子控件之间留一个小间隙(比如 2 或 3 个像素)。这可以用相同的颜色或稍微不同的阴影绘制。

  • 将光标设置IDC_SIZENS为主 CView。

  • 处理主 CView 中的鼠标消息(当鼠标悬停在该间隙上时)(向下,移动,..)。

  • 在“拖动”时调整子控件的大小。

这样,所有消息仍然会发送到子控件,除非鼠标位于那些 2 到 3 像素的“拆分器”上方。

如果留下一个小间隙确实没有选择,那么您将不得不捕获 CView 中的所有鼠标消息并检查它们是否在边框上。如果没有,则将它们转发(或默认)到鼠标光标下方的子窗口。

于 2016-01-22T14:59:30.890 回答