Esempio n. 1
0
        /// <summary>
        /// Overrided to controll del scrolling of the customControl VScrollBar1
        /// </summary>
        /// <param name="m"></param>
        /// <remarks></remarks>
        protected override void WndProc(ref Message m)
        {
            if (!this.DesignMode && !(!this.Parent.CanFocus | (_win == null)))
            {
                int  wndStyle  = WIN32ScrollBars.GetWindowLong(this._win.Handle, WIN32ScrollBars.GWL_STYLE);
                bool hsVisible = (wndStyle & WIN32ScrollBars.WS_HSCROLL) != 0;
                bool vsVisible = (wndStyle & WIN32ScrollBars.WS_VSCROLL) != 0;

                //horizontal
                if (hsVisible)
                {
                    this.si2.fMask  = (int)WIN32ScrollBars.ScrollInfoMask.SIF_ALL;
                    this.si2.cbSize = Marshal.SizeOf(this.si2);
                    WIN32ScrollBars.GetScrollInfo(this._win.Handle, (int)WIN32ScrollBars.ScrollBarDirection.SB_HORZ, ref this.si2);

                    if ((this.si2.nMax + 0) <= this.si2.nPage)
                    {
                        this.HScrollBar1.Visible = false;
                    }
                    else
                    {
                        this.HScrollBar1.Visible = true;
                        if (this.si2.nPage != 0)
                        {
                            HScrollBar1.LargeChange = si2.nPage;
                            HScrollBar1.Maximum     = si2.nMax;
                            HScrollBar1.Minimum     = si2.nMin;
                            HScrollBar1.SmallChange = 1;
                            this.HScrollBar1.Update();//.SyncThumbPositionWithLogicalValue();
                        }
                    }
                }
                if (_win.GetType() == typeof(System.Windows.Forms.ListView) || (_win.GetType() == typeof(KryptonListView)))
                {
                    ListView listView1 = (ListView)_win;

                    WIN32ScrollBars.ScrollInfo si = new WIN32ScrollBars.ScrollInfo();
                    si.cbSize = Marshal.SizeOf(si);
                    si.fMask  = (int)WIN32ScrollBars.ScrollInfoMask.SIF_ALL;
                    if (WIN32ScrollBars.GetScrollInfo(listView1.Handle, (int)WIN32ScrollBars.ScrollBarDirection.SB_HORZ, ref si))
                    {
                        HScrollBar1.LargeChange = si.nPage;
                        HScrollBar1.Maximum     = si.nMax;
                        HScrollBar1.Minimum     = si.nMin;
                        HScrollBar1.SmallChange = 1;
                        this.HScrollBar1.Update();//.SyncThumbPositionWithLogicalValue();
                    }
                }
                if (_win.GetType() == typeof(KryptonGrid) || _win.GetType() == typeof(System.Windows.Forms.DataGridView) || (_win.GetType() == typeof(KryptonDataGridView)))
                {
                    WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_HSCROLL, (IntPtr)WIN32ScrollBars.SB_TOP, IntPtr.Zero);
                    _win.Invalidate();
                }
            }
            base.WndProc(ref m);
        }
Esempio n. 2
0
        private void HScrollBar1_miScroll(object sender, ScrollEventArgs e)
        {
            if (_win.GetType() == typeof(System.Windows.Forms.ListView) || (_win.GetType() == typeof(KryptonListView)))
            {
                ListView listView1 = (ListView)_win;

                int nIsAt       = WIN32ScrollBars.GetScrollPos(listView1.Handle, WIN32ScrollBars.SB_HORZ);
                int nShouldBeAt = (int)e.NewValue;

                int pixelsToScroll = Convert.ToInt32((nShouldBeAt - nIsAt));

                WIN32ScrollBars.SendMessage(listView1.Handle, (int)WIN32ScrollBars.LVM_SCROLL, pixelsToScroll, 0);

                Invalidate();
            }
            else
            {
                if (_win.GetType() == typeof(KryptonGrid) || _win.GetType() == typeof(System.Windows.Forms.DataGridView) || (_win.GetType() == typeof(KryptonDataGridView)))
                {
                    DataGridView dgv = (DataGridView)_win;
                    if (GetDGVScrollbar(ref dgv, out HSB))
                    {
                        foreach (Control control in dgv.Controls)
                        {
                            if (control is HScrollBar)
                            {
                                HScrollBar hscroll = (HScrollBar)control;
                                if (hscroll.Visible)
                                {
                                    switch (e.Type)
                                    {
                                    case ScrollEventType.ThumbTrack:
                                        if (e.NewValue >= e.OldValue)
                                        {
                                            WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_HSCROLL, (IntPtr)WIN32ScrollBars.SB_LINEDOWN, HSB.Handle);
                                        }
                                        else
                                        {
                                            WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_HSCROLL, (IntPtr)WIN32ScrollBars.SB_LINEUP, HSB.Handle);
                                        }

                                        WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_HSCROLL, (IntPtr)WIN32ScrollBars.SB_THUMBTRACK, HSB.Handle);
                                        break;

                                    default:
                                        WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_HSCROLL, (IntPtr)e.Type, HSB.Handle);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        this.HScrollBar1.Visible = false;
                    }
                }
                else
                {
                    if (_win.GetType() == typeof(System.Windows.Forms.TreeView) || (_win.GetType() == typeof(Krypton.Toolkit.KryptonTreeView)))
                    {
                        switch (e.Type)
                        {
                        case ScrollEventType.ThumbTrack:
                            if (e.NewValue >= e.OldValue)
                            {
                                WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_HSCROLL, (IntPtr)WIN32ScrollBars.SB_LINEDOWN, IntPtr.Zero);
                            }
                            else
                            {
                                WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_HSCROLL, (IntPtr)WIN32ScrollBars.SB_LINEUP, IntPtr.Zero);
                            }

                            WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_HSCROLL, (IntPtr)WIN32ScrollBars.SB_THUMBTRACK, IntPtr.Zero);
                            break;

                        default:
                            WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_HSCROLL, (IntPtr)e.Type, IntPtr.Zero);
                            break;
                        }
                    }
                    else
                    {
                        WIN32ScrollBars.PostMessageA(this._win.Handle, WIN32ScrollBars.WM_HSCROLL, WIN32ScrollBars.SB_THUMBPOSITION + (0x10000 * this.HScrollBar1.Value), 0);
                    }
                }
            }
        }
        /// <summary>
        /// Comming from the customControl
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <remarks></remarks>
        private void VScrollBar1_miScroll(object sender, ScrollEventArgs e)
        {
            if (_win.GetType() == typeof(ListView) || (_win.GetType() == typeof(KryptonListView)))
            {
                ListView listView1 = (ListView)_win;

                IntPtr min = IntPtr.Zero;
                IntPtr max = IntPtr.Zero;
                WIN32ScrollBars.GetScrollRange(listView1.Handle, WIN32ScrollBars.SB_VERT, ref min, ref max);

                int nMax = max.ToInt32();
                nMax += 3;

                int nHeight        = listView1.DisplayRectangle.Height;
                int ItemRectHeight = listView1.GetItemRect(0).Height;

                int nTimes           = (nHeight - 17) / ItemRectHeight;
                int nScrollPositions = (nMax - nTimes) + 1;

                double nThePos = VScrollBar1.Maximum / nScrollPositions;

                double RealPos = 0.0;
                if (nThePos <= 0.0)
                {
                    RealPos = VScrollBar1.Value;
                }
                else
                {
                    RealPos = VScrollBar1.Value / nThePos;
                }

                int nPos = WIN32ScrollBars.GetScrollPos(listView1.Handle, WIN32ScrollBars.SB_VERT);

                double nShouldBeAt = RealPos * ItemRectHeight;
                double nIsAt       = nPos * ItemRectHeight;

                int pixelsToScroll = Convert.ToInt32((nShouldBeAt - nIsAt));

                WIN32ScrollBars.SendMessage(listView1.Handle, WIN32ScrollBars.LVM_SCROLL, IntPtr.Zero, (IntPtr)pixelsToScroll);

                Invalidate();
            }
            else
            {
                if (_win.GetType() == typeof(KryptonGrid) || _win.GetType() == typeof(DataGridView) || (_win.GetType() == typeof(KryptonDataGridView)))
                {
                    DataGridView dgv = (DataGridView)_win;
                    if (GetDGVScrollbar(ref dgv, out VSB))
                    {
                        foreach (Control control in dgv.Controls)
                        {
                            if (control is VScrollBar)
                            {
                                VScrollBar vscroll = (VScrollBar)control;
                                if (vscroll.Visible)
                                {
                                    switch (e.Type)
                                    {
                                    case ScrollEventType.ThumbTrack:
                                        if (e.NewValue >= e.OldValue)
                                        {
                                            WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_VSCROLL, (IntPtr)WIN32ScrollBars.SB_LINEDOWN, VSB.Handle);
                                        }
                                        else
                                        {
                                            WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_VSCROLL, (IntPtr)WIN32ScrollBars.SB_LINEUP, VSB.Handle);
                                        }

                                        WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_VSCROLL, (IntPtr)WIN32ScrollBars.SB_THUMBTRACK, VSB.Handle);
                                        break;

                                    default:
                                        WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_VSCROLL, (IntPtr)e.Type, VSB.Handle);
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    else
                    {
                        VScrollBar1.Visible = false;
                    }
                }
                else
                {
                    if (_win.GetType() == typeof(TreeView) || (_win.GetType() == typeof(Krypton.Toolkit.KryptonTreeView)))
                    {
                        switch (e.Type)
                        {
                        case ScrollEventType.ThumbTrack:
                            if (e.NewValue >= e.OldValue)
                            {
                                WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_VSCROLL, (IntPtr)WIN32ScrollBars.SB_LINEDOWN, IntPtr.Zero);
                            }
                            else
                            {
                                WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_VSCROLL, (IntPtr)WIN32ScrollBars.SB_LINEUP, IntPtr.Zero);
                            }

                            WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_VSCROLL, (IntPtr)WIN32ScrollBars.SB_THUMBTRACK, IntPtr.Zero);
                            break;

                        default:
                            WIN32ScrollBars.SendMessage(_win.Handle, WIN32ScrollBars.WM_VSCROLL, (IntPtr)e.Type, IntPtr.Zero);
                            break;
                        }
                    }
                    else
                    {
                        WIN32ScrollBars.PostMessageA(_win.Handle, WIN32ScrollBars.WM_VSCROLL, WIN32ScrollBars.SB_THUMBPOSITION + (0x10000 * VScrollBar1.Value), 0);
                    }
                }
            }
        }