Один из обходных путей, который приходит на ум, - это использование двух окон, наложенных друг на друга. Визуализируйте «нижнее» окно с непрозрачностью 50%, а затем владелец перетянет ваш текст в окно, наложенное поверх другого. Если вы работаете с дисплеями типа lable, это может быть просто, но может быстро усложниться, если вам нужно много пользовательского ввода, который затем может быть отфильтрован до вашего «основного» или «нижнего» окна.
Итак, я заставил его работать, но это немного коротко. Решение с двумя окнами казалось многообещающим, пока я не обнаружил, что .Net или Win32 делает что-то странное с автоматическим воспитанием, когда вы даже неявно ссылаетесь на него. Вероятно, это связано с тем, как сообщения перекачиваются. Основной родительский объект содержит насос сообщений приложения, а int guess неявно является родительским ... ... 1003 *
Я попробовал кучу обходных путей, но этот таймер ниже работал лучше всего. В любом случае, это может быть ключом к тому, чтобы сделать это лучше ...
// 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();
}
}
}
// «верхнее» или непрозрачное окно. Обратите внимание, что владелец привлекает
// прозрачный фон. Настройки времени разработки также не имеют границ и т. Д.
использование System.Drawing;
используя System.Windows.Forms;
пространство имен TransparencyPlusNottransparentTest
{
открытый частичный класс FormTop: Form
{
public FormTop ()
{
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 );
}
}
}
// Контроль всего этого шпиля. Он создает оба окна,
// устанавливает главное как главное окно приложения и размещает общедоступный
// хакерский метод для принудительного отображения непрозрачного окна сверху
// и смещение, чтобы оно не закрывало верхнюю часть главного окна.
используя Систему;
использование System.Drawing;
используя System.Windows.Forms;
пространство имен TransparencyPlusNottransparentTest
{
Программа статического класса
{
приватная статическая FormMain _formMain;
приватный статический 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();
}
}
}