天天看點

控制帶有滾動條的控件(ListView,TreeView等)的滾動條顯示

這是一個小小的元件,實作控制帶有滾動條的控件(ListView,TreeView等)的滾動條顯示。    帶有滾動條的控件,通常情況下都是需要顯示滾動條的時候,如果水準滾動條和垂直滾動條都需要顯示,就一起顯示出來。但是有的時候我們隻想讓其隻顯示一條滾動條,例如隻顯示垂直滾動條,我們應該怎麼辦呢?我們可以通過API函數:ShowScrollBar (檢視)來實作。另外,我們可以通過API函數:GetWindowLong (檢視)來查詢目前控件是否需要顯示滾動條。先定義好這兩個API函數:

[DllImport("user32.dll")]
private static extern int ShowScrollBar(IntPtr hWnd, int iBar, int bShow);

[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hwnd, int nIndex);
           

現在,我們可以繼承 NativeWindow 來寫出我們需要的元件了。主要是重載 WndProc 函數:

protected override void WndProc(ref Message m)

        {

            HideScrollBar(ref m);

            base.WndProc(ref m);

     }
           

最後,來看看關鍵的 HideScrollBar 函數。

private void HideScrollBar(ref Message m)

        {

            int dwStyle = GetWindowLong(base.Handle, GWL_STYLE);

 

            switch (_scrollBar)

            {

                case SB.SB_HORZ:

                    if ((dwStyle & WS_HSCROLL) == WS_HSCROLL)

                    {

                        ShowScrollBar(base.Handle, (int)_scrollBar, 0);

                    }

                    break;

                case SB.SB_VERT:

                    if ((dwStyle & WS_VSCROLL) == WS_VSCROLL)

                    {

                        ShowScrollBar(base.Handle, (int)_scrollBar, 0);

                    }

                    break;

            }

      }
           

繼續閱讀