程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅:WinForm.NET中開發具有固定背景圖片的可滾動控件(6)

C#發現之旅:WinForm.NET中開發具有固定背景圖片的可滾動控件(6)

編輯:關於C語言

然後筆者重載控件的 OnPaintBackground方法用於自定義繪制背景,其代碼如下。

///  <summary>
/// 自定義繪制控件背景
/// </summary>
///  <param name="e"></param>
protected override void  OnPaintBackground(PaintEventArgs e)
{
    base.OnPaintBackground (e);
    if (myLogonImage != null)
    {
         // 在控件客戶區的右下角繪制標志圖片
        int x =  this.ClIEntSize.Width - myLogonImage.Width;
        int y =  this.ClIEntSize.Height - myLogonImage.Height;
        if  (e.ClipRectangle.IntersectsWith(
            new Rectangle(
                x,
                y,
                myLogonImage.Width,
                 myLogonImage.Height)))
        {
             e.Graphics.DrawImage(
                myLogonImage,
                x,
                y,
                myLogonImage.Width ,
                 myLogonImage.Height );
        }
    }
}

接著要處理控件的滾動事件了,首先筆者導入Win32API函數 LockWindowUpdate,其代碼如下

[System.Runtime.InteropServices.DllImport("user32.dll")]
private static  extern bool LockWindowUpdate(IntPtr hWnd);

筆者重載控件的OnScroll 方法,其代碼如下

/// <summary>
/// 處理滾動條事件
/// </summary>
/// <param name="se">事件參數 </param>
protected override void OnScroll(ScrollEventArgs se)
{
    if (bolFixedBackground)
    {
        //  執行固定背景的操作
        if (se.Type ==  ScrollEventType.ThumbTrack)
        {
             // 若滾動框正在移動,解除對控件用戶界面的鎖定
             LockWindowUpdate(IntPtr.Zero);
            // 立即重新繪制控件 所有的用戶界面
            this.Refresh();
             // 鎖定控件的用戶界面
            LockWindowUpdate (this.Handle);
        }
        else
         {
            // 解除對控件用戶界面的鎖定
             LockWindowUpdate(IntPtr.Zero);
            // 聲明 控件的所有的內容無效,但不立即重新繪制
             this.Invalidate();
        }
    }
     base.OnScroll(se);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved