Вывести надпись поверх всех окон. - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Подскажите, как можно, используя C#, вывести текст поверх всех окон, на экран(желательно чтобы мышка щелкала "сквозь" него). Допустим, нужно выводить какую-либо техническую информацию, чтобы всегда была перед глазами оператора. Есть ли в С# средства для этого? Гугл не помог, а мучиться с GDI, выводя напрямую на экран текст, который могут затереть (и затрут) другие окна, очень не хочется.

Решение задачи: «Вывести надпись поверх всех окон.»

textual
Листинг программы
  1.    using System.Drawing.Drawing2D;
  2.     using System.Threading;
  3.  
  4.     public partial class Form1 : Form
  5.     {
  6.          int i = 0;
  7.          string PATH_STRING ;
  8.         const int FONT_SIZE = 100;
  9.         const FontStyle FONT_STYLE = FontStyle.Bold;
  10.          SizeF stringSize;
  11.         Timer stateTimer;  
  12.         public Form1()
  13.         {
  14.             InitializeComponent();
  15.  
  16.            
  17.             this.TopMost = true;
  18.             // здесь интервал таймера 100 мс
  19.             stateTimer = new Timer(delegate { myMethod(); }, null, 0, 100);
  20.  
  21.         }
  22.  
  23.         void myMethod()
  24.         {
  25.             // вот здесь устанавливай нужное значение строки
  26.             PATH_STRING = String.Format("{0:d4}", i);
  27.             ++i;
  28.  
  29.             //Получаем оконные координаты верхней левой точки клиентской области
  30.             Point origin = new Point(SystemInformation.Border3DSize.Width, SystemInformation.CaptionHeight);
  31.             //При помощи GraphicsPath создаем Region в виде строки
  32.             GraphicsPath path = new GraphicsPath();
  33.            
  34.             path.AddString(PATH_STRING, Font.FontFamily, (int)FONT_STYLE, FONT_SIZE, origin, StringFormat.GenericDefault);
  35.             this.BeginInvoke(new Action(() =>
  36.                 {
  37.                     //Устанавливаем регион для формы
  38.                     Region = new Region(path);
  39.                     //Вычисляем размеры прямоугольника, занимаемого строкой
  40.                     stringSize = CreateGraphics().MeasureString(PATH_STRING, new Font(Font.FontFamily, FONT_SIZE, FONT_STYLE));
  41.                     Width = (int)Math.Ceiling(stringSize.Width);
  42.                 }));
  43.            
  44.            
  45.         }
  46.         protected override void OnPaint(PaintEventArgs e)
  47.         {          
  48.  
  49.             LinearGradientBrush brush = new LinearGradientBrush(ClientRectangle, Color.Yellow, Color.Blue, 10);
  50.             e.Graphics.FillRectangle(brush, 0, 0, stringSize.Width, stringSize.Height);
  51.         }
  52.  
  53.         //Чтобы наше окно можно было "тягать" мышью, "скажем" системе что вся его область является заголовком,
  54.         //захватив который, как известно, можно перемещать окно
  55.         const int WM_NCHITTEST = 0x0084;
  56.         const int HTCAPTION = 2;
  57.         protected override void WndProc(ref Message m)
  58.         {
  59.             if (m.Msg == WM_NCHITTEST)
  60.             {
  61.                 m.Result = (IntPtr)HTCAPTION;
  62.                 return;
  63.             }
  64.             base.WndProc(ref m);
  65.         }
  66.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы