标签: z-order

创建自定义透明控件

我正在尝试创建一个自定义控件,显示每像素alphablend的位图(正如你们中的一些人已经知道其他问题).

现在我在资源编辑器中使用自定义控件,并将其附加到从CWnd派生的类.当我注册我的自定义类时,我将WNDCLASS structe的hbrBackground设置为NULL_BRUSH以获得控件的透明度.

在控件的OnPaint中,我使用AlphaBlend绘制每像素alpha混合位图.

这很有效,但我有两个问题:

  • 我想在鼠标悬停在控件上时更改显示的位图.由于控件是透明的,因此不会擦除一个位图与另一个位图不重叠的区域.如何在图像更改时删除背景?

  • 第二个问题与两个重叠控制有关.我的控件被绘制在具有渐变的其他控件上(实际上是在其他控件内).问题是,如果我之前将控件放在z顺序中,则其他控件与我的控件重叠,并且不会显示我的控件.如果我之前将其他控件放在z顺序中,则无法在我的控件中获取鼠标消息.

也许我做错了什么,或者我错误地想要实现我的控制.任何形式的帮助将不胜感激.

谢谢,

哈维尔

controls mfc transparency alphablending z-order

5
推荐指数
1
解决办法
1424
查看次数

c#wpf重叠控件没有接收鼠标事件

我正在构建一个画布控件.此根画布具有多个重叠的子画面(画布也是如此).这样做是为了让每个孩子都可以处理自己的绘图,然后我可以用任何子组合来组合最终结果,以获得所需的行为.

就渲染而言,这非常有效.但是,对于鼠标事件,这不能很好地工作.鼠标事件的工作方式如下(使用previewmousemove作为示例):

1-如果root画布位于鼠标下,则触发事件2-检查所有子项,如果一个项目在鼠标下,则触发事件并停止

因此,只有我添加的第一个孩子才会收到鼠标移动事件.事件不会传播给所有子项,因为它们重叠.

为了解决这个问题,我尝试了以下方法:1-在根画布中覆盖鼠标事件2-对于每个事件,使用VisualTreeHelper.HitTest查找要处理事件的所有子项3-对于返回有效命中测试结果的所有子项(即:在鼠标下并愿意处理事件(IsHitTestVisible == true)),???

这是我被卡住的地方,我不知何故需要将鼠标事件发送给所有孩子,并停止事件的正常流程以确保第一个孩子没有收到它两次(通过事件中的processed = true).

通过使用RaiseEvent并在子节点上传递相同的事件,事情似乎有效,但不知何故它也会在父(根画布)上引发事件.为了绕过这个,我需要创建事件的副本并设置强制设置源,尽管它看起来更像是一个黑客而不是解决方案.有没有正确的方法来做我想做的事情?代码示例如下.

    public class CustomCanvas : Canvas
    {
        private List<object> m_HitTestResults = new List<object>();

        public new event MouseEventHandler MouseMove;

        public CustomCanvas()
        {
            base.PreviewMouseMove += new MouseEventHandler(CustomCanvas_MouseMove);
        }

        private void CustomCanvas_MouseMove(object sender, MouseEventArgs e)
        {
// Hack here, why is the event raised on the parent as well???
            if (e.OriginalSource == this)
            {
                return;
            }

                Point pt = e.GetPosition((UIElement)sender);
                m_HitTestResults.Clear();

                VisualTreeHelper.HitTest(this,
                    new HitTestFilterCallback(OnHitTest),
                    new HitTestResultCallback(OnHitTest),
                    new PointHitTestParameters(pt));

                MouseEventArgs tmpe = new MouseEventArgs(e.MouseDevice, …
Run Code Online (Sandbox Code Playgroud)

c# wpf mouse controls z-order

5
推荐指数
1
解决办法
1万
查看次数

JCombobox下拉可见性问题?

我有一个根面板(2行,1列),其中有面板P和标签L. P里面有一个JComboBox B. 每当我点击B时,结果下拉显示在L后面.如何修复此问题?我玩各种setComponentZOrder(),但我无法解决这个问题.我该怎么办?

java swing z-order miglayout jcombobox

5
推荐指数
1
解决办法
1779
查看次数

DrawingContext.DrawLine:Pen没有完全不透明度?

当我画这样的东西时(这里只是随机图纸):

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DrawingVisual visual = new DrawingVisual();
        DrawingContext context = visual.RenderOpen();

        Pen pen = new Pen(Brushes.Black, 1);

        context.DrawEllipse(Brushes.YellowGreen, pen, new Point(0,0), 40, 40);

        for (int i = 0; i <= 100 - 1; i++)
          context.DrawLine(new Pen(Brushes.Black, 1), new Point(0, i), new Point(i, i));

        context.Close();

        RenderTargetBitmap bmp = new RenderTargetBitmap(100, 100, 96, 96, PixelFormats.Pbgra32);

        bmp.Render(visual);
        image1.Source = bmp;
    }
}
Run Code Online (Sandbox Code Playgroud)

DrawLine和DrawEllipse混合的颜色.(我发现只有DrawLine才使用笔,而不是像Rectangle和Ellipse这样使用Brush的其他形式).奇怪的是,即使是基础网格背景(argh)的LinearGradientBrush的颜色. 我希望它们是z-Ordered,每个都具有完全不透明度.

这里是XAML代码:

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"> …
Run Code Online (Sandbox Code Playgroud)

wpf transparency z-order opacity drawingcontext

5
推荐指数
2
解决办法
3205
查看次数

MainFormOnTaskbar +工具提示导致焦点窃取

我使用Delphi XE2构建了下面的代码.它创建Form1,Form1立即创建Form2的实例.当我按下Form2上的按钮时,将创建第二个Form2.

现在,如果我将鼠标悬停在第二个,最上面的Form2上的按钮上,并等待工具提示出现,工具提示出现的那一刻,第一个 Form2来到前面,窃取焦点.

只有在出现问题Application.MainFormOnTaskbarTrue.它还依赖于从Form1 FormCreate方法创建的第一个Form2 .如果我使用PostMessage()延迟创建第一个Form2直到应用程序完成初始化,问题就会消失.

我想知道为什么会这样.我已经知道Delphi的Application对象处理很多事情,包括提示显示,我知道Delphi可以在初始化期间重新创建一个窗口的句柄,但是我无法通过这个来完全解释上述行为(或者确实上述两个事实是否相关).

Project1.dpr

program Project1;

uses
  Vcl.Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True; // False makes problem go away
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)

Unit1.pas

unit Unit1;
interface
uses
  Vcl.Forms, Unit2;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  public
    procedure CreateForm2;
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  CreateForm2;
end;

procedure TForm1.CreateForm2;
var
  frm …
Run Code Online (Sandbox Code Playgroud)

delphi z-order delphi-xe2

5
推荐指数
1
解决办法
874
查看次数

如何将点击事件映射到多层中的元素?

我有多个 SVG 元素,它们位于不同的组中。它们相互重叠。例子:

<svg id="board" width="100%" height="80%">
   <g id="terrain" class="layer">
     <path d="M-32,-32L32,-32 32,32 -32,32Z" transform="translate(0, 0)" class="mote terrain hill"></path>
   </g>
   <g id="guy" class="layer">
     <path d="M-21...Z" transform="translate(192, 448)" class="mote guy"></path>
   </g>
</svg>
Run Code Online (Sandbox Code Playgroud)

当单击与两者匹配的 x、y 位置时,我想知道两者都被单击的所有内容。如果我将每个事件绑定到“单击”事件,则只会调用顶部事件处理程序。这是合理的,尽管不是我想要的。

我正在考虑创建一个最顶层并让它捕获所有点击,然后找出应该通知其他层中的哪些元素。如果可能的话,我想避免大量的跟踪。有更简单的方法吗?

javascript svg z-order layer

5
推荐指数
1
解决办法
1648
查看次数

当停靠控件可见时Z顺序更改

我在.NET Framework 4.0版中使用C#Winforms

我有一个面板,其中包含四个标签,所有标签都停靠在面板的顶部.中间的两个标签是隐藏的.

---顶部---
标签一(可见)
标签二 - (不可见)
标签三(不可见)
标签四 - (可见)
---底部---

单击带有以下代码的按钮时

private void btnShowLabels_Click(object sender, EventArgs e)
{
    this.lblTwo.Visible = true;
    this.lblThree.Visible = true;
}
Run Code Online (Sandbox Code Playgroud)

标签二和三出现,但它们的z顺序混合起来,如下所示.

---顶部---
标签一(可见)
标签(可见)
标签 - (可见)
标签四 - (可见)
---底部---

为什么z顺序会发生变化,如何阻止这种情况发生.

我意识到我可以BringToFront()在点击事件中使用重新排序所有标签,但这对于更复杂的对接安排尤其有点过分.

c# docking z-order

5
推荐指数
2
解决办法
1449
查看次数

在UIStackView上指定z顺序(sendSubviewToBack等)

根据Apple文档:

子视图数组的顺序定义了子视图的Z顺序。如果视图重叠,则索引较低的子视图将出现在索引较高的子视图之后。

我可以看到是这种情况,因为我试图使用对其进行手动排序sendSubviewToBack,而不起作用。如何在UIStackView中调整安排的子视图的z顺序?

layout z-order ios swift uistackview

5
推荐指数
1
解决办法
1220
查看次数

为 matplotlib 散点图中的每个标记赋予单独的 zorder 值

我有一个带有许多标记的 matplotlib 散点图:

plt.scatter(x_position,y_position,c=z_position,s=90, cmap=cm.bwr,linewidth=1,edgecolor='k')
Run Code Online (Sandbox Code Playgroud)

有时标记重叠。我希望每个的 zorder 基于单个标记的 z_position。

这在散点图中是否可行,或者我是否必须为每个数据点使用单独的线和自己的 zorder 值?

谢谢你。

python matplotlib z-order

5
推荐指数
1
解决办法
2666
查看次数

为什么文本显示在使用 CSS 的绝对定位图像后面?

使用此 HTML,我无法弄清楚为什么文本显示在图像后面:

<div style="position: relative">
<img src="image_url_here" style="position:absolute; top: 10px; left: 10px;" />  
This is some text, drawn on the page after the image, why is it drawn behind the image?
</div>
Run Code Online (Sandbox Code Playgroud)

?

在 Mac 和 PC 上的 Chrome 和 PC 上的 IE 中测试。

css position image z-order absolute

4
推荐指数
2
解决办法
7565
查看次数