乙個簡單的c 滾動AboutBox控制

2022-02-12 13:02:31 字數 3567 閱讀 4430

介紹 我想有乙個滾動的盒子在我的專案可以顯示文字,影象,並自動滾動學分對話方塊。這是乙個額外的特性我寧願增加完成我的一些應用程式。花很多時間在網際網路上搜尋之後,我找到了一些文章和例子**,特別是在這個**,我印象深刻的是,以下文章: ccreditsctrl——乙個先進的盒子。 cscrollctrl: autoscrolling文字控制。 以上都是做得很好,但是他們不是我想要的是什麼。這些專案是在visual c++ 6.0開發或visual c++ 7.1 (. net),但使用mfc,因為我不能建立乙個c#控制基於他們的模組。我不得不改變他們適合我的工作。 背景 正如前面說的,這些示例程式使用mfc程式設計方便。函式createcompatibledc, createcompatiblebitmap selectobject等。在mfc常見的影象處理方法和操作的裝置上下文視窗。但是,我現在工作在. net框架中,使用vb。淨或c#,所以上面的程式不能幫助我了。 我開始在網上搜尋,看在msdn,知道有乙個解決方案在c#中使用舊的win32 api圖形函式光滑的畫。這個想法是為了讓c#知道你將使用一些從非託管dll函式,使用dllimport屬性。dllimport的詳細文件可以在。net中找到文件。我是乙個新手在c#中,所以這對我來說太難了嘗試解決這個問題。 幸運的是,我們可以達到同樣的目標影象的系統。畫在。net命名空間。影象呈現在。net mfc相比,簡單而高效得多。有兩個函式圖形類呈現你的影象物件在螢幕上,這些都是drawimage drawimageunscaled。所以,我們會做我們的螢幕繪圖物件在乙個影象。之後,我們可以使用這些函式來渲染這個物件直接直流和平滑的動畫效果。 在我的**,我會試著畫中的所有顯示物件onpaint()事件的控制:隱藏,複製code

private

void ctlscrollabout_paint(object sender,

system.windows.forms.painteventargs e)

}

這並不奇怪,如果你想知道當螢幕。通常,我們稱之為drawimage前繪製函式。在這種情況下,我們的控制是乙個自動滾動aboutbox,所以我們必須有乙個計時器操作滾動的速度。可以畫出螢幕計時器tick事件和呼叫onpaint手動()函式。看看這個:隱藏,複製code

//

timer tick event

private

void tmescrolling_tick(object sender, system.eventargs e)

下次會議將描述如何滾動aboutbox管理它的顯示物件。有兩種顯示物件的控制:乙個文字物件和乙個影象物件。可以使用的一種常見方法,所有這些物件在乙個列表。net支援一些基礎物件集合如arraylist,雜湊表、佇列、棧,sortedlist等,可以輕鬆使用。但是,我們希望我們自己的特定顯示物件列表,所以我們應該繼承從可用的乙個新類。我們有clsdisplaylist管理顯示物件,如下所示:隱藏,複製code

//

inherits a new custom list object from collectionbase class

public

class clsdisplaylist : system.collections.collectionbase

//provide array-index access to display object list

public clsdisplayobject this[int index]

set}

}

顯示物件,它是安裝乙個類擁有所有必要的成員變數和相應的屬性。滾動aboutbox將使用這些屬性來繪製在螢幕上正確顯示物件:隱藏,收縮,複製code

//

a instance of the display object

public

class clsdisplayobject

在控制項的類,我們宣告的例項clsdisplaylist()和提供一些方法來新增乙個新的顯示物件:隱藏,收縮,複製code

public

class ctlscrollabout : system.windows.forms.usercontrol

///<

summary

>

///add a bitmap display object.

///<

/summary

>

public

void adddisplaybitmap(string filename,

int bmpheight, int bmpwidth)

}

'

vb.net example code

private

sub form1_load(byval sender as system.object, _

byval e as system.eventargs) handles

mybase.load

ctrabout.linespacing = 20

ctrabout.xmargin = 20

ctrabout.ymargin = 20

ctrabout.scrollingstep = 1

ctrabout.scrollingtime = 100

ctrabout.adddisplaytext("

scrolling aboutbox", "

arial black", _

15, system.drawing.fontstyle.bold, system.drawing.brushes.white)

ctrabout.adddisplaytext("

developed by", "

arial black", 10, _

system.drawing.fontstyle.italic, system.drawing.brushes.olive)

ctrabout.adddisplaytext("

man_man2612", "

arial black", 10, _

system.drawing.fontstyle.strikeout, system.drawing.brushes.violet)

ctrabout.adddisplaybitmap("

images\test.gif", 115, 115)

ctrabout.adddisplaybitmap("

images\pic0.bmp", 100, 100)

ctrabout.startscrolling()

endsub

// c# example code

private void form1_load(object sender, system.eventargs e)

總結 我們現在知道如何建立乙個定製的使用者控制在。net框架為特定的目的。我們也看到,乙個新的繼承的類,用於管理自己的物件集合是非常簡單的。這個滾動aboutbox有一些高階功能,我想改善例如文字包裝,超連結物件,動畫形象等。但由於我消的時候,我剛剛建立的這篇文章,希望這種開放源**的人可以幫我做乙個新的有用的滾動aboutbox版本。 歷史 2023年10月25日,1.0版。 文章提交。 2023年1月20日 丹•morphis更新。 本文**於:

乙個簡單的verlig程式 乙個簡單C程式的介紹

我們前面學了c語言的一些理論知識,今天通過乙個簡單的程式先來看一看c語言程式是什麼樣子。然後再對程式中的 進行介紹。這個語句的功能是進行有關的預處理操作。include稱為檔案包含命令,後面尖括號的內容稱為標頭檔案或首檔案。此處指包含stdio.h系統標頭檔案,在下面主函式中使用的printf 函式...

c 乙個簡單的執行緒

c 本身並沒有提供任何多執行緒機制,但是在windows下,我們可以呼叫sdk win32 api來編寫多執行緒的程式 msdn中createthread原型 1 2 3 4 5 6 7 8 handlecreatethread lpsecurity attributeslpthreadattrib...

C ( 的乙個簡單的使用)

knnsearchresultadaptor neighborhood results,size t k,scalart max radius std numeric limits max results results k k count 0 這裡總結一下 的使用 其實冒號後的內容是初始化成員列表...