Вывести надпись поверх всех окон. - 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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д