Una soluzione che viene in mente è quella di utilizzare due finestre sovrapposte l'una sull'altra. Rendi la finestra "in basso" al 50% di opacità e poi il proprietario traccia il tuo testo in una finestra sovrapposta a quella dell'altro. Se stai facendo display di tipo "lable" questo potrebbe essere semplice, ma potrebbe essere complicato rapidamente se hai bisogno di molti input da parte dell'utente che potrebbero poi essere filtrati attraverso la finestra "principale" o "in basso".
Quindi, ho capito, ma è un po 'squirreloso. La soluzione a due finestre sembrava promettente fino a quando non ho scoperto che .Net o Win32 fa qualcosa di genitoriale auto strano quando ci si riferisce anche implicitamente ad esso. Probabilmente ha a che fare con il modo in cui i messaggi vengono pompati però. Il genitore principale detiene il messaggio dell'applicazione pump e int indovina è implicitamente il genitore ...
ho provato un sacco di soluzioni alternative ma questa cosa del timer di seguito ha funzionato al meglio. In ogni caso, potrebbe essere un indizio di fare meglio ...
// 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" o no finestra trasparente. Si noti che il proprietario si basa su
// sfondo trasparente. Le impostazioni di progettazione sono anche senza bordo, ecc.
utilizzando System.Drawing;
usando System.Windows.Forms;
namespace TransparencyPlusNottransparentTest
{
public class FormTop parziale: Modulo
{
FormTop pubblico() {
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);
}
}
}
// Il controllo di tutta questa spiel. Crea un'istanza di entrambe le finestre,
// imposta il principale come finestra principale dell'app e ospita il metodo pubblico
// hacky per forzare la finestra non trasparente a mostrare in primo piano
// e l'offset in modo da non oscurare la parte superiore della finestra principale.
usando il Sistema;
utilizzando System.Drawing;
utilizzando System.Windows.Forme;
namespace TransparencyPlusNottransparentTest
{
Programma classe statica
{private static
FormMain _formMain;
formTop statico privato _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();
}
}
}
Questa non è la stessa, cosa dice questo è che quando si disegna qualsiasi colore questa chiave è impostata, mostrerà come trasparente, il che significa 0% Opaco (o completamente trasparente a seconda se sei un ragazzo mezzo pieno). Non ti permette di impostarlo al 50% trasparente. – esac
OK. Grazie per l'aggiornamento. Hai ragione, certo. TransparencyKey funzionerà solo se desideri renderlo al 100% trasparente. (Io sono una coppa mezza piena me stesso.) – David