Вывести надпись поверх всех окон. - C#
Формулировка задачи:
Здравствуйте. Подскажите, как можно, используя C#, вывести текст поверх всех окон, на экран(желательно чтобы мышка щелкала "сквозь" него). Допустим, нужно выводить какую-либо техническую информацию, чтобы всегда была перед глазами оператора. Есть ли в С# средства для этого? Гугл не помог, а мучиться с GDI, выводя напрямую на экран текст, который могут затереть (и затрут) другие окна, очень не хочется.
Решение задачи: «Вывести надпись поверх всех окон.»
textual
Листинг программы
using System.Drawing.Drawing2D; using System.Threading; public partial class Form1 : Form { int i = 0; string PATH_STRING ; const int FONT_SIZE = 100; const FontStyle FONT_STYLE = FontStyle.Bold; SizeF stringSize; Timer stateTimer; public Form1() { InitializeComponent(); this.TopMost = true; // здесь интервал таймера 100 мс stateTimer = new Timer(delegate { myMethod(); }, null, 0, 100); } void myMethod() { // вот здесь устанавливай нужное значение строки PATH_STRING = String.Format("{0:d4}", i); ++i; //Получаем оконные координаты верхней левой точки клиентской области Point origin = new Point(SystemInformation.Border3DSize.Width, SystemInformation.CaptionHeight); //При помощи GraphicsPath создаем Region в виде строки GraphicsPath path = new GraphicsPath(); path.AddString(PATH_STRING, Font.FontFamily, (int)FONT_STYLE, FONT_SIZE, origin, StringFormat.GenericDefault); this.BeginInvoke(new Action(() => { //Устанавливаем регион для формы Region = new Region(path); //Вычисляем размеры прямоугольника, занимаемого строкой stringSize = CreateGraphics().MeasureString(PATH_STRING, new Font(Font.FontFamily, FONT_SIZE, FONT_STYLE)); Width = (int)Math.Ceiling(stringSize.Width); })); } protected override void OnPaint(PaintEventArgs e) { LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, Color.Yellow, Color.Blue, 10); e.Graphics.FillRectangle(brush, 0, 0, stringSize.Width, stringSize.Height); } //Чтобы наше окно можно было "тягать" мышью, "скажем" системе что вся его область является заголовком, //захватив который, как известно, можно перемещать окно const int WM_NCHITTEST = 0x0084; const int HTCAPTION = 2; protected override void WndProc(ref Message m) { if (m.Msg == WM_NCHITTEST) { m.Result = (IntPtr)HTCAPTION; return; } base.WndProc(ref m); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д