Вывести надпись поверх всех окон. - 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);
        }
    }

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


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

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

12   голосов , оценка 4.25 из 5
Похожие ответы