м.Дра моргает много - PullRequest
0 голосов
/ 21 мая 2019

Я использую эту функцию в таймере:

IntPtr Handle = FindWindow(null, "Notepad");

if (radioButton1.Checked)
{
    using (Graphics g = Graphics.FromHwnd(Handle))
    {
        Pen PN = new Pen(pictureBox2.BackColor, (Convert.ToInt32(numericUpDown2.Value)));
        g.DrawLine(PN, 961, 520, 961, 560);
        g.DrawLine(PN, 985, 540, 935, 540);
        g.Dispose();
    }
}

Но ничья часто мигает, даже если я установил интервал таймера на 1

1 Ответ

0 голосов
/ 21 мая 2019

Ваш код получит только дескриптор главного окна.

Большинство приложений имеют другие элементы управления, которые охватывают эту клиентскую область.

Вместо того, чтобы рисовать на клиентской области, вам нужно получить ручку текстовой области Блокнота.

Вы можете проверить это

  • проверка значения ручки. Если это 0, у вас есть только рабочий стол. Это, вероятно, то, что вы видели.

  • Если вы протестируете его в собственной форме, он покажет ваш крестик тогда и только тогда, когда область рисования не будет закрыта другими элементами управления.

Также неплохо перечислить процессы, чтобы получить правильные заголовки. Вот пример, который я нашел в другом посте:

public static IntPtr WinGetHandle(string wName)
{
    IntPtr hWnd = IntPtr.Zero;
    foreach (Process pList in Process.GetProcesses())
    {
        if (pList.MainWindowTitle.Contains(wName))
        {
            hWnd = pList.MainWindowHandle;
        }
        Console.WriteLine(pList.MainWindowTitle);
    }
    return hWnd;
}

Потребуется еще несколько кодов проб и ошибок, чтобы найти подходящий подручник поверхности приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...