Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PanelView, Кто нибудь сталкивался с этим Control?  
:(
    Опции темы
lightforever
Дата 2.9.2010, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 4.9.2009

Репутация: нет
Всего: нет



Кто нибудь сталкивался с этим Control?  Не найду его в object browser, в то время как в другом проекте(прога для снятия скриншотов Desktop'a) :

http://www.gotdotnet.ru/Downloads/Examples/781.aspx он используется, причём насколько я понял - это не производный класс. Просмотрел импортируемые файлы - нигде он не описывается. Вот часть кода:

using System;
using System.Drawing;
using System.Windows.Forms;
using Pikhulya;

namespace Pikhulya.GotDotNet.Samples.MyZoomer
{
    /// <summary>
    /// Основная форма приложения
    /// </summary>
    public class FormMain: Form
    {
        !!!!!!!!!!!!!!PanelView panelView;
        Point desktopDimension;
..............

Файл, где описывается пространство Pikhulya:

using System;
using System.Runtime.InteropServices;
using System.Drawing;

namespace Pikhulya
{
    /// <summary>
    /// Оболочка для Win32 функций
    /// </summary>
    public class Win32
    {
        [DllImport("User32.dll")]
        public static extern IntPtr GetDC(IntPtr hWnd);

        [DllImport("User32.dll")]
        public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);

        [DllImport("Gdi32.dll")]
        public static extern int BitBlt(
            IntPtr hdcDest, 
            int nXDest,  
            int nYDest,  
            int nWidth,  
            int nHeight, 
            IntPtr hdcSrc,
            int nXSrc,   
            int nYSrc,   
            int dwRop  
            );

        [DllImport("Gdi32.dll")]
        public static extern int StretchBlt(
            IntPtr hdcDest,      
            int nXOriginDest, 
            int nYOriginDest, 
            int nWidthDest,   
            int nHeightDest,  
            IntPtr hdcSrc,    
            int nXOriginSrc,  
            int nYOriginSrc,  
            int nWidthSrc,    
            int nHeightSrc,   
            int dwRop       
            );

        public const int SRCCOPY = 0x00CC0020;

        [DllImport("Gdi32.dll")]
        public static extern int SetROP2(IntPtr hDC, int fnDrawMode);

        public const int R2_NOT = 6;    
        public const int R2_NOP = 11;

        [DllImport("Gdi32.dll")]
        static extern int MoveToEx(IntPtr hDC, int x, int y, IntPtr lpPoint);

        public static int MoveTo(IntPtr hDC, int x, int y)
        {
            return MoveToEx(hDC, x, y, IntPtr.Zero);
        }

        [DllImport("Gdi32.dll")]
        public static extern int LineTo(IntPtr hDC,    int nXEnd, int nYEnd);

        [DllImport("Gdi32.dll")]
        static extern int GetPixel(
            IntPtr hdc,    
            int nXPos, 
            int nYPos  
            );

        public static Color GetPixelColor(IntPtr hDC, int x, int y)
        {
            long colorRef = GetPixel(hDC, x, y);
            return Color.FromArgb((byte)colorRef, (byte)(colorRef >> 8), (byte)(colorRef >> 16));
        }

        [DllImport("Gdi32.dll")]
        public static extern IntPtr SelectObject(IntPtr hDC, IntPtr hGdiObj);

        [DllImport("Gdi32.dll")]
        public static extern IntPtr CreateCompatibleDC(IntPtr hdc);

        [DllImport("Gdi32.dll")]
        public static extern IntPtr CreateCompatibleBitmap(IntPtr hDC,    int nWidth,    int nHeight);

        [DllImport("Gdi32.dll")]
        public static extern int DeleteObject(IntPtr hObject);
    }
}



PM MAIL   Вверх
Fortnox
Дата 2.9.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



lightforever, в файле FormMain.cs, начиная со строки 260 идет этот класс:
Код

/// <summary>
        /// На этой панели происходит рисование захваченного изображения
        /// </summary>
        class PanelView: Panel
        {
            /// <summary>
            /// Аргумент для события изменения текущего цвета(при перемещении мыши)
            /// на захваченном изображении
            /// </summary>
            public class CurrentColorChangedEventArgs: EventArgs
            {
                public CurrentColorChangedEventArgs(Color color)
                {
                    this.color = color;
                }

                Color color;
                public Color Color
                {
                    get
                    {
                        return color;
                    }
                }
            }
            
            public delegate void CurrentColorChangedEventHandler(object sender, CurrentColorChangedEventArgs e);
            public event CurrentColorChangedEventHandler CurrentColorChanged;

            /// <summary>
            /// Аргумент для события остановки захвата
            /// </summary>
            public class CaptureStoppedEventArgs: EventArgs
            {
                Rectangle captureRectangle;
                public Rectangle CaptureRectangle
                {
                    get
                    {
                        return captureRectangle;
                    }
                }

                public CaptureStoppedEventArgs(Rectangle captureRectangle)
                {
                    this.captureRectangle = captureRectangle;
                }
            }

            public delegate void CaptureStoppedEventHandler(object sender, CaptureStoppedEventArgs e);
            public event CaptureStoppedEventHandler CaptureStopped;
            
            Color previousColor;

            bool needGrab;
            ScreenCapturer capturer;

            /// <summary>
            /// Коэфициент увеличения
            /// </summary>
            public int ZoomRate
            {
                set
                {
                    capturer.ZoomRate = value;
                    Invalidate();
                }
            }

            public PanelView()
            {
                SetStyle(ControlStyles.ResizeRedraw, true);
                capturer = new ScreenCapturer(this);
            }

            public Rectangle CaptureRectangle
            {
                get
                {
                    return capturer.CaptureRectangle;
                }
            }
            
            protected override void OnMouseDown(MouseEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    capturer.BeginCapture(new Point(e.X, e.Y));
                    needGrab = true;
                }

                base.OnMouseDown(e);
            }

            protected override void OnMouseMove(MouseEventArgs e)
            {
                if (needGrab)
                    capturer.CopyImage(new Point(e.X, e.Y));
                else
                {
                    Graphics graphics = CreateGraphics();
                    IntPtr hDC = graphics.GetHdc();
                    Color color = Win32.GetPixelColor(hDC, e.X, e.Y);
                    if (color != previousColor)
                    {
                        if (CurrentColorChanged != null)
                            CurrentColorChanged(this, new CurrentColorChangedEventArgs(color));
                        previousColor = color;
                    }
                    graphics.ReleaseHdc(hDC);
                }
                
                base.OnMouseMove(e);
            }

            protected override void OnMouseUp(MouseEventArgs e)
            {
                if (needGrab)
                    if (e.Button == MouseButtons.Left)
                    {
                        Rectangle captureRectangle = capturer.StopCapture();
                        needGrab = false;
                        if (CaptureStopped != null)
                            CaptureStopped(this, new CaptureStoppedEventArgs(captureRectangle));
                    }
                base.OnMouseUp(e);
            }

            protected override void OnPaint(PaintEventArgs e)
            {
                capturer.PaintControl(e.Graphics);
                base.OnPaint(e);
            }

            public void FormDeactivated()
            {
                if (!needGrab)
                    return;
                Rectangle captureRectangle = capturer.StopCapture();
                if (CaptureStopped != null)
                    CaptureStopped(this, new CaptureStoppedEventArgs(captureRectangle));
            }

            public void SetDisplaySettings(Point desktopDimension)
            {
                capturer.DesktopDimension = desktopDimension;
            }
        }
    }

PM MAIL   Вверх
lightforever
Дата 3.9.2010, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 4.9.2009

Репутация: нет
Всего: нет



Извиняюсь за невнимательсноть, я ещё не привык, что классы в C# могут идти после их использования. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1163 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.