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

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

編輯:關於C語言

分析問題

根據上述觀察到的現象可以知道WinForm.Net控件天生具有固定背 景的功能,其背景圖片是不隨控件的滾動而滾動。但Windows的默認滾動圖形的操作卻破壞了 這個功能,從而造成了控件滾動時背景破碎的現象。

根據上述的原理,筆者可以得出 ,只要阻止Windows默認的滾動圖形的操作即可保護WinForm.Net控件的天生的固定背景的功 能,從而實現固定背景的帶滾動的控件。

WinForm.Net並沒有提供任何禁止Windows默 認滾動圖形的功能,於是筆者使用到了一個強大的Win32API函數,那就是LockWindowUpdate 。

這個API函數在C#中的聲明形式如下 

[DllImport (“user32.dll”)]
external static bool LockWindowUpdate(  IntPtr hWndLock );

這個函數能允許或禁止指定窗體的繪制操作,在任何 時刻,整個操作系統中只能有一個窗體的繪圖操作被禁止掉。

這個函數的參數是窗體 句柄,若參數為0表示用戶界面被鎖定的窗體重新釋放而能繪制用戶界面。

只要在控 件發生滾動時程序調用LockWindowUpdate函數,則控件的內容被鎖定了,不能反映任何圖形 操作,Windows默認的滾動圖形的操作就沒有效果。當控件的滾動操作完成調用 LockWindowUpdate函數來重新釋放窗體並強制重新繪制控件的所有內容,則就能實現固定背 景的效果。

根據上述分析,筆者只要處理控件的滾動事件,當控件內容發生滾動時調 用LockWindowUpdate函數鎖定控件用戶界面,而滾動完畢後又調用LockWindowUpdate函數解 除鎖定並重新繪制控件所有的內容則就可以讓控件發送滾動時不背景圖片不隨之滾動。

在WinForm.NET2.0中,支持滾動的控件都是從 System.Windows.Forms.ScrollableControl派生的,這些控件都提供一個Scroll事件。這個 事件的參數是一個System.Windows.Forms.ScrollEventArgs類型的對象,該參數有一個Type 屬性值,是System.Windows.Forms.ScrollEventType類型,用於表示滾動事件的類型。 WinForm.Net2.0中支持的滾動事件類型有以下幾種。

滾動事件 類型 說明 SmallDecrement 滾動框移動 了較短的距離。用戶單擊了左(水平)或上(垂直)滾動箭頭,或者按了向上鍵。 SmallIncrement 滾動框移動了較短的距離。用戶單擊了右 (水平)或下(垂直)滾動箭頭,或者按了向下鍵。 LargeDecrement 滾動框移動了較長的距離。用戶在滾動條上單擊了滾動框左側 (水平)或上方(垂直),或者按了 Page Up 鍵。 LargeIncrement 滾動框移動了較長的距離。用戶在滾動條上單擊了滾動框右側 (水平)或下方(垂直),或者按了 Page Down 鍵。 ThumbPosition 滾動框被移動。 ThumbTrack 滾動框當前正在移動。 First 滾動框被移動到 System.Windows.Forms.ScrollBar.Minimum 位置。 Last 滾動框被移動到 System.Windows.Forms.ScrollBar.Maximum 位置。 EndScroll 滾動框已停止移動。

一般的用戶在進行滾動操作時會觸發一個或多個不同類型的滾動 事件,而且這些事件的發生過程和Windows操作系統的“拖動時顯示窗口內容”設 置有關。

筆者在控制面板中運行“顯示”項目,顯示出“顯示屬性 ”對話框,切換到“外觀”標簽頁,點擊“效果”按鈕,彈出的 “效果”對話框中就能設置“拖動時顯示窗口內容”的操作系統配置 項了。這個選項對控件的滾動行為影響很大。

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