Ich entwickle eine assistive Technologieanwendung (in C#), die Informationen über dem aktuell geöffneten Fenster überlagert. Es erkennt anklickbare Elemente und kennzeichnet sie.Wie zeichnet man über das Kontextmenü in .NET/C#?
Um dies zu tun, ich derzeit ein randloses, transparentes Fenster mit TopMost auf "true" erstellen und die Beschriftungen darauf zeichnen. Das bedeutet, dass sich immer ein Fenster vor der aktuellen Anwendung befindet, auf der ich die Beschriftungen zeichnen kann.
Das Problem ist, dieses Fenster deckt nicht das Rechtsklick-Menü - nur andere Fenster. Wenn der Benutzer mit der rechten Maustaste klickt, wird das Kontextmenü über das Overlay gezeichnet.
Ich muss in der Lage sein, Elemente im Kontextmenü zu kennzeichnen, aber ich kann nicht mit der aktuellen Implementierung darauf zeichnen. Kennt jemand eine Lösung?
Edit: Dies ist der relevante Code zum Zeichnen des Overlays. Ich habe die Formularoptionen im Formular-Designer festgelegt, nicht im Code explizit, also bin ich mir nicht sicher, wie viel es helfen wird. Ich habe den Code nicht im Zusammenhang mit Zeichnung entfernt, oder das Formular selbst:
public partial class OverlayForm : Form
{
public OverlayForm()
{
}
protected override void OnPaint(PaintEventArgs eventArgs)
{
base.OnPaint(eventArgs);
Graphics graphics = eventArgs.Graphics;
Brush brush = new SolidBrush(this.labelColor);
foreach (ClickableElement element in this.elements)
{
Region currentRegion = element.region;
graphics.FillRegion(brush, currentRegion);
}
}
}
Können Sie Ihren Code für das Overlay – Jacobr365
@ Jacob365 zeigen - Sicher Sache, hinzugefügt. :) – JackCC
Ich glaube nicht, dass das möglich ist. Das Kontextmenü wird noch "oberster" als Ihr Formular gezeichnet, da es vom Betriebssystem den Fokus und eine höhere Z-Reihenfolge erhält. – DonBoitnott