带有透明但可单击的外部边框的子框架

时间:2018-07-23 15:25:23

标签: visual-c++ mfc transparent mdi mfc-feature-pack

我正在为MDI应用程序创建自定义绘制的Windows 10样式子框架类(从CMDIChildWndEx派生)。我已经完成了所有绘图工作,并且工作正常(我有一个残留的绘图问题,但我将单独询问),但是我无法弄清楚如何在绘制的窗口边界之外获得一个透明但可单击的区域。 / p>

问题在于,Windows 10样式的框架只有一个像素宽,这实际上太窄了,无法实际确定框架的大小。因此,我正在尝试做的是在边框外部有一个3像素宽的透明区域,该区域是窗口非客户区域的一部分,因此可以单击。窗口区域设置正确,但是3像素宽的区域永远不会被主框架重绘,因此它会使其他子框架的部分“卡住”,并且看起来糟透了。我假设Windows假设我的窗口负责绘制其声明区域内的所有内容,因此不会在该区域内重新绘制任何内容。

如果我将窗口区域仅扩展到1像素可见边框,则不会收到消息(即OnNcLButtonDownOnNcLButtonDblClkOnNcMouseMovewhen,用户将鼠标移到区域。

我尝试使要重绘主框架的区域无效(通过从我的InvalidateRect类调用RedrawWindowCMainFrame),这两个区域都是我要重绘的区域,并且整个子框架区域,都没有成功。强迫主机重新绘制自身及其所有子框架,但当然会导致可怕,缓慢,闪烁的混乱,所以这不是实际的解决方案。

我在网上找不到任何有帮助的东西,并且尝试了我能想到的一切,因此,我非常感谢任何建议!

我很高兴展示代码,但是希望以上内容能够充分说明问题。

下面的屏幕截图显示了效果,每个子框架的边框在拖动时都被另一个破坏。

Screenshot showing transparent border corruption

0 个答案:

没有答案