Рисование в чужом окне - C#

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

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

Собственно, я понимаю как рисовать, мне больше интересно 2 момента: 1) Если я просто буду рисовать на окне, то при его перерисовке всё быстро сотрётся. 2) Если же я буду рисовать в bitamap, а потом рисовать его на форме, то всё будет ОЧЕНЬ медленно. Я так понял, что нужно ставить хук на перерисовку и рисовать самому. Вот с этим моментом не могу найти подробное объяснение.

Решение задачи: «Рисование в чужом окне»

textual
Листинг программы
// Если карта не видна или перекрыты видео то не рисуем её
                if (full_sc)
                    return;
 
                // Диаметр рисуемой точки
                int POINT_D = imageList_fix_map.Images[1].Height;                 
 
                System.Drawing.Graphics map_g;
                map = new System.Drawing.Bitmap(pictureBox_map.Width, pictureBox_map.Height);
                map_g = System.Drawing.Graphics.FromImage(map);
                map_g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
 
                // текущие размеры карты
                int map_center_X = pictureBox_map.Width / 2;
                int map_center_Y = pictureBox_map.Height / 2;
 
                # region тактика
 
                // Рисуем иконки тактики
                if (tactic_el.Count > 0)
                {
                    int offset_tmpXtactic_el = imageList_46x46.Images[0].Width / 2;
                    int offset_tmpYtactic_el = imageList_46x46.Images[0].Height / 2;
 
                    for (int i = 0; i < tactic_el.Count; ++i)
                    {
                        tactic_el[i]._absX = (int)(tactic_el[i]._relX * (double)pictureBox_map.Width);
                        tactic_el[i]._absY = (int)(tactic_el[i]._relY * (double)pictureBox_map.Height);
 
                        int tmpXtactic_el = tactic_el[i]._absX;
                        int tmpYtactic_el = tactic_el[i]._absY;
 
                        map_g.DrawImage(imageList_46x46.Images[tactic_el[i]._index_ico + 12], new Point(tmpXtactic_el - offset_tmpXtactic_el, tmpYtactic_el -   offset_tmpYtactic_el));
 
                        // Активная иконка тактики
                        if (num_active_tactic == i)
                            map_g.DrawImage(imageList_46x46.Images[18], new Point(tmpXtactic_el - offset_tmpXtactic_el, tmpYtactic_el - offset_tmpYtactic_el));
                    }
                }

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


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

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

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