偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

C#內(nèi)存Graphics對(duì)象

開(kāi)發(fā) 后端
這里介紹C#內(nèi)存Graphics對(duì)象,以及介紹DrawText函數(shù)根據(jù)需要顯示文字的大小和范圍調(diào)用Graphics.DrawString將文字顯示在窗體的特定區(qū)域。

Windos窗體有很多值得學(xué)習(xí)的地方,這里我們主要介紹C#內(nèi)存Graphics對(duì)象,包括介紹SetBackgroundBitmap函數(shù)。

想必大部分網(wǎng)友都使用過(guò)QQ、MSN等聊天程序,它們的界面都相當(dāng)華麗,尤其是當(dāng)網(wǎng)友上線以及消息提示時(shí)會(huì)有一個(gè)浮動(dòng)的窗體從屏幕的右下方緩慢升起,既美觀又人性化,作為程序員在享受的同時(shí)我們也不禁要問(wèn):這到底是怎么實(shí)現(xiàn)的呢?本文就利用C#內(nèi)存Graphics對(duì)象

SetBackgroundBitmap函數(shù)首先將窗體背景圖像保存到BackgroundBitmap變量中,然后根據(jù)該位圖圖像輪廓和透明色創(chuàng)建Region,BitmapToRegion就用于完成Bitmap到Region的轉(zhuǎn)換,程序再將這個(gè)Region付值給窗體的Region屬性以完成不規(guī)則窗體的創(chuàng)建。

  1. public void SetBackgroundBitmap(Image image, Color transparencyColor)  
  2. {  
  3. BackgroundBitmap = new Bitmap(image);  
  4. Width = BackgroundBitmap.Width;  
  5. Height = BackgroundBitmap.Height;  
  6. Region = BitmapToRegion(BackgroundBitmap, transparencyColor);  
  7. }  
  8.  
  9. public Region BitmapToRegion(Bitmap bitmap, Color transparencyColor)  
  10. {  
  11. if (bitmap == null)  
  12. throw new ArgumentNullException("Bitmap", "Bitmap cannot be null!");  
  13.  
  14. int height = bitmap.Height;  
  15. int width = bitmap.Width;  
  16. GraphicsPath path = new GraphicsPath();  
  17. for (int j = 0; j < height; j++)  
  18. for (int i = 0; i < width; i++)  
  19. {  
  20. if (bitmap.GetPixel(i, j) == transparencyColor)  
  21. continue;  
  22. int x0 = i;  
  23. while ((i < width) && (bitmap.GetPixel(i, j) != transparencyColor))  
  24. i++;  
  25. path.AddRectangle(new Rectangle(x0, j, i - x0, 1));  
  26. }  
  27. Region region = new Region(path);  
  28. path.Dispose();  
  29. return region;  

通知窗體背景以及文字的繪制在重載的OnPaintBackground方法中完成,而且利用了雙重緩沖區(qū)技術(shù)來(lái)進(jìn)行繪制操作,代碼如下:

  1. protected override void OnPaintBackground(PaintEventArgs e)  
  2. {  
  3. Graphics grfx = e.Graphics;  
  4. grfx.PageUnit = GraphicsUnit.Pixel;  
  5. Graphics offScreenGraphics;  
  6. Bitmap offscreenBitmap;  
  7. offscreenBitmap = new Bitmap(BackgroundBitmap.Width, BackgroundBitmap.Height);  
  8. offScreenGraphics = Graphics.FromImage(offscreenBitmap);  
  9. if (BackgroundBitmap != null)  
  10. {  
  11. offScreenGraphics.DrawImage(BackgroundBitmap, 0, 0, 
    BackgroundBitmap.Width, BackgroundBitmap.Height);  
  12. }  
  13. DrawText(offScreenGraphics);  
  14. grfx.DrawImage(offscreenBitmap, 0, 0);  

上述代碼首先返回窗體繪制表面的Graphics并保存在變量grfx中,然后創(chuàng)建一個(gè)C#內(nèi)存Graphics對(duì)象offScreenGraphics和內(nèi)存位圖對(duì)象offscreenBitmap,將內(nèi)存位圖對(duì)象的引用付值給offScreenGraphics,這樣所有對(duì)offScreenGraphics的繪制操作也都同時(shí)作用于offscreenBitmap,這時(shí)就將需要繪制到通知窗體表面的背景圖像BackgroundBitmap繪制到C#內(nèi)存Graphics對(duì)象上,DrawText函數(shù)根據(jù)需要顯示文字的大小和范圍調(diào)用Graphics.DrawString將文字顯示在窗體的特定區(qū)域。***,調(diào)用Graphics.DrawImage將內(nèi)存中已經(jīng)繪制完成的圖像顯示到通知窗體表面。

我們還需要捕獲窗體的鼠標(biāo)操作,有三個(gè)操作在這里進(jìn)行,
1、處理拖動(dòng)窗體操作
2、處理通知窗體的關(guān)閉操作
3、內(nèi)容區(qū)域的單擊操作。
三個(gè)操作都需要檢測(cè)鼠標(biāo)的當(dāng)前位置與每個(gè)Rectangle區(qū)域的包含關(guān)系,只要單擊落在特定區(qū)域我們就進(jìn)行相應(yīng)的處理,代碼如下:

  1. private void TaskbarForm_MouseDown(object sender, MouseEventArgs e)  
  2. {  
  3. if (e.Button == MouseButtons.Left)  
  4. {  
  5. if (TitlebarRectangle.Contains(e.Location)) //單擊標(biāo)題欄時(shí)拖動(dòng)  
  6. {  
  7. ReleaseCapture(); //釋放鼠標(biāo)捕捉  
  8. SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);   
  9. //發(fā)送左鍵點(diǎn)擊的消息至該窗體(標(biāo)題欄)  
  10. }  
  11. if (CloseBtnRectangle.Contains(e.Location)) //單擊Close按鈕關(guān)閉  
  12. {  
  13. this.Hide();  
  14. currentTop = 1;  
  15. }  
  16. if (ContentRectangle.Contains(e.Location )) //單擊內(nèi)容區(qū)域  
  17. {  
  18. System.Diagnostics.Process.Start("http://www.Rithia.com");  
  19. }  
  20. }  

該程序可以很好的進(jìn)行通知窗體的顯示、停留和隱藏操作,并且具備簡(jiǎn)單的換膚機(jī)制,在利用了雙重緩沖區(qū)繪圖技術(shù)后,可以保證窗體的繪制平滑且沒(méi)有閃爍。

【編輯推薦】

  1. C#與VB7比較詳解
  2. C#連接Access淺析
  3. C#創(chuàng)建XML Web services學(xué)習(xí)經(jīng)驗(yàn)
  4. C# Windows應(yīng)用程序概述
  5. C# SmartPhone程序?qū)W習(xí)筆記
責(zé)任編輯:佚名 來(lái)源: 賽迪網(wǎng)
相關(guān)推薦

2009-08-20 17:13:37

C# FileSyst

2009-08-28 16:50:25

C# PromptPo

2009-08-19 17:12:18

C# Connecti

2009-08-12 11:24:25

C# String對(duì)象

2009-08-31 09:37:09

C# Employee

2009-08-25 10:08:39

C# MyData對(duì)象

2009-09-02 15:41:21

C# HTTPWebR

2009-08-25 16:03:51

C# SQLDMO對(duì)象

2009-08-26 10:34:59

C# Hashtabl

2009-08-31 09:44:23

C# Employee

2009-08-28 10:14:45

C#內(nèi)存泄露

2009-09-03 16:58:49

C#內(nèi)存管理

2009-08-20 11:01:51

C#操作內(nèi)存

2009-09-03 17:21:51

C# VSProjec

2009-08-21 17:45:40

C#調(diào)用COM對(duì)象

2009-08-03 11:32:49

C#調(diào)用COM對(duì)象

2009-09-02 16:02:52

C#引用托管對(duì)象

2009-09-01 10:58:46

C#匿名類(lèi)型對(duì)象

2009-08-26 17:24:49

C# Mutex對(duì)象

2009-08-18 09:06:41

C#對(duì)象和集合
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)