Ejemplo n.º 1
0
 protected override void DestroyWindowCore(HandleRef hwnd)
 {
     PInvoke.DestroyWindow(hwnd.Handle);
 }
Ejemplo n.º 2
0
        protected override IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
        {
            handled = false;

            switch (msg)
            {
            case PInvoke.WM_NCHITTEST:     // Activate mouse events
                handled = true;
                return(new IntPtr(PInvoke.HTCLIENT));

            case PInvoke.WM_PAINT:
                PInvoke.PAINTSTRUCT pStruct;

                PInvoke.BeginPaint(hWnd, out pStruct);
                this.Render();
                PInvoke.EndPaint(hWnd, ref pStruct);

                handled = true;
                return(IntPtr.Zero);

            case PInvoke.WM_MOUSEMOVE:
                if ((PInvoke.GetKeyState(PInvoke.VK_LBUTTON) & 0x80) == 0)
                {
                    _isDragging = false;
                }
                if (_isDragging)
                {
                    PInvoke.SetCursor(_cursorGrabbing);

                    var offsetX = (int)((_dragStartPos.X - PInvoke.LOWORD(lParam)) / _scale);
                    var offsetY = (int)((_dragStartPos.Y - PInvoke.HIWORD(lParam)) / _scale);

                    if (_dragFirstVisiblePos.X + offsetX < 0)
                    {
                        FirstVisiblePos.X = 0;
                    }
                    else if (_dragFirstVisiblePos.X + offsetX + RealVisibleWidth > RealWidth)
                    {
                        FirstVisiblePos.X = (int)(RealWidth - RealVisibleWidth);
                    }
                    else
                    {
                        FirstVisiblePos.X = _dragFirstVisiblePos.X + offsetX;
                    }

                    if (_dragFirstVisiblePos.Y + offsetY < 0)
                    {
                        FirstVisiblePos.Y = 0;
                    }
                    else if (_dragFirstVisiblePos.Y + offsetY + RealVisibleHeight > RealHeight)
                    {
                        FirstVisiblePos.Y = (int)(RealHeight - RealVisibleHeight);
                    }
                    else
                    {
                        FirstVisiblePos.Y = _dragFirstVisiblePos.Y + offsetY;
                    }

                    StaticLoader.Mediator.NotifyColleagues(MediatorMessages.ResizeImageScrollBar);

                    handled = true;
                }

                return(IntPtr.Zero);

            case PInvoke.WM_LBUTTONDOWN:
                PInvoke.SetCursor(_cursorGrabbing);

                _dragStartPos.X = PInvoke.LOWORD(lParam);
                _dragStartPos.Y = PInvoke.HIWORD(lParam);

                _dragFirstVisiblePos = FirstVisiblePos;

                _isDragging = true;

                handled = true;
                return(IntPtr.Zero);

            case PInvoke.WM_LBUTTONUP:
                _isDragging = false;
                handled     = true;
                return(IntPtr.Zero);
            }

            return(IntPtr.Zero);
        }