Jednym z obejść, które przychodzi na myśl, jest użycie dwóch okien nałożonych jeden na drugi. Renderuj "dolne" okno z 50% kryciem, a następnie właściciel narysuje tekst w oknie nałożonym na drugie. Jeśli robisz wyświetlacze typu lable, może to być proste, ale może się szybko skomplikować, jeśli potrzebujesz dużo danych wejściowych od użytkownika, które następnie mogą zostać przefiltrowane do twojego "głównego" lub "dolnego" okna.
Tak, mam to do pracy, ale jest trochę squirrelly. Rozwiązanie dwóch okien wydawało się obiecujące, dopóki nie odkryłem, że .Net lub Win32 wykonuje jakieś dziwne auto-rodzicielstwo, nawet jeśli nieodwracalnie się do niego odwołujesz. Prawdopodobnie ma to związek ze sposobem pompowania wiadomości. Główny nadrzędny zawiera pompę komunikatów aplikacji i domyślnie jest rodzicem ...
Próbowałem kilku obejść, ale ta kwestia czasu działała najlepiej. W każdym razie, może to być wskazówką, aby to zrobić lepiej ...
// the "main" or transparent window. Notice it just sets and runs the timer
using System;
using System.Windows.Forms;
namespace TransparencyPlusNottransparentTest
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
Program.ShowNontransparency();
}
}
}
// "top" lub nie przezroczyste okno. Zwróć uwagę, że rysuje on na
// przezroczystym tle. Ustawienia czasu projektowania to także sans border itp.
przy użyciu System.Drawing;
przy użyciu System.Windows.Forms;
nazw TransparencyPlusNottransparentTest
{
publicznych częściowe klasy FormTop: Formularz
{
FormTop publicznych()
{
InitializeComponent();
BackColor = Color.Firebrick;
TransparencyKey = Color.Firebrick;
}
private void FormTop_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawString("Hello Whirrled!", new Font("Tahoma", 14f), Brushes.Black, 10f, 10f);
}
}
}
// Kontrola całej tej przemowy. Tworzy oba okna,
// ustawia główny jako główne okno aplikacji i hostuje publiczną
// metodę hacky, aby wymusić wyświetlanie nieprzezroczystego okna na wierzchu
// i przesunięcie, aby nie zasłaniać góry głównego okna.
przy użyciu systemu;
using System.Drawing;
przy użyciu System.Windows.Formy;
nazw TransparencyPlusNottransparentTest
{
static class Program {
private static FormMain _formMain;
private static FormTop _formTop;
private const int XY_OFFSET = 30;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
_formTop = new FormTop();
_formTop.Show(null);
_formMain = new FormMain();
Application.Run(_formMain);
}
public static void ShowNontransparency()
{
_formTop.Location =
new Point(
_formMain.Location.X + XY_OFFSET,
_formMain.Location.Y + XY_OFFSET);
_formTop.BringToFront();
}
}
}
To nie to samo, co ten mówi, że kiedy narysować cokolwiek kolor ten klucz jest ustawiony, to pokaże jak przejrzyste, co oznacza 0% Opaque (lub całkowicie przezroczysty w zależności od tego, czy jesteś półpełnym kielichem). Nie pozwala ustawić go w 50% przezroczystym. – esac
OK. Dziękuję za aktualizację. Masz rację, oczywiście. Klawisz TransparencyKey będzie działał tylko wtedy, gdy chcesz uczynić go w 100% tranparentnym. (Sam jestem półfrancusyjnym facetem). – David