protected override void DestroyWindowCore(HandleRef hwnd) { PInvoke.DestroyWindow(hwnd.Handle); }
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); }