繁体   English   中英

在自定义WinForms控件上覆盖InkCanvas

[英]Overlay an InkCanvas on a custom WinForms control

我有一个自定义的WinForms控件,可以显示一些图形。 我需要在此控件上覆盖一个InkCanvas InkCanvas应该是“透视”(透明背景,可见墨水)。 InkCanvas允许用户在所显示的图形上绘制草图。

我知道WPF / WinForms互操作中的空域问题(WPF窗口中托管的WinForms元素将始终位于所有其他组件之上的事实)。 所以很明显,我无法在WPF中达到预期的效果。 我决定以另一种方式解决该问题(在WinForms窗体中托管InkCanvas并将InkCanvas覆盖在我的自定义控件上)。

问题是WinForms ElementHost不能被“透视”(不能设置透明度)。 我尝试使用以下重写派生ElementHost

protected override CreateParams CreateParams
{
    get
    {
        const int WS_EX_TRANSPARENT = 0x20;
        CreateParams cp = base.CreateParams;
        cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
        return cp;
    }
}

但这将使整个事情变得完全透明(草图不再可见)。

如何在透明的WinForms控件上覆盖可见墨水的“透明” InkCanvas

基于评论和缺乏答案,我们可以放心地假设除非要进行@Hans Passant提到的“窗口分层”黑客,否则我想做的事情是不可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM