成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#內存Graphics對象

開發 后端
這里介紹C#內存Graphics對象,以及介紹DrawText函數根據需要顯示文字的大小和范圍調用Graphics.DrawString將文字顯示在窗體的特定區域。

Windos窗體有很多值得學習的地方,這里我們主要介紹C#內存Graphics對象,包括介紹SetBackgroundBitmap函數。

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

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

  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方法中完成,而且利用了雙重緩沖區技術來進行繪制操作,代碼如下:

  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中,然后創建一個C#內存Graphics對象offScreenGraphics和內存位圖對象offscreenBitmap,將內存位圖對象的引用付值給offScreenGraphics,這樣所有對offScreenGraphics的繪制操作也都同時作用于offscreenBitmap,這時就將需要繪制到通知窗體表面的背景圖像BackgroundBitmap繪制到C#內存Graphics對象上,DrawText函數根據需要顯示文字的大小和范圍調用Graphics.DrawString將文字顯示在窗體的特定區域。***,調用Graphics.DrawImage將內存中已經繪制完成的圖像顯示到通知窗體表面。

我們還需要捕獲窗體的鼠標操作,有三個操作在這里進行,
1、處理拖動窗體操作
2、處理通知窗體的關閉操作
3、內容區域的單擊操作。
三個操作都需要檢測鼠標的當前位置與每個Rectangle區域的包含關系,只要單擊落在特定區域我們就進行相應的處理,代碼如下:

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

該程序可以很好的進行通知窗體的顯示、停留和隱藏操作,并且具備簡單的換膚機制,在利用了雙重緩沖區繪圖技術后,可以保證窗體的繪制平滑且沒有閃爍。

【編輯推薦】

  1. C#與VB7比較詳解
  2. C#連接Access淺析
  3. C#創建XML Web services學習經驗
  4. C# Windows應用程序概述
  5. C# SmartPhone程序學習筆記
責任編輯:佚名 來源: 賽迪網
相關推薦

2009-08-20 17:13:37

C# FileSyst

2009-08-28 16:50:25

C# PromptPo

2009-08-25 16:03:51

C# SQLDMO對象

2009-08-31 09:44:23

C# Employee

2009-08-26 10:34:59

C# Hashtabl

2009-09-02 15:41:21

C# HTTPWebR

2009-08-19 17:12:18

C# Connecti

2009-08-25 10:08:39

C# MyData對象

2009-08-12 11:24:25

C# String對象

2009-08-31 09:37:09

C# Employee

2009-08-28 10:14:45

C#內存泄露

2009-09-03 16:58:49

C#內存管理

2009-08-20 11:01:51

C#操作內存

2009-08-10 13:40:46

創建C# COM對象

2009-09-04 14:01:30

C#存儲BLOB對象

2009-08-18 09:06:41

C#對象和集合

2009-08-20 17:22:45

C# FileSyst

2009-08-18 11:32:24

C# FTP WebR

2009-09-02 16:36:37

C#調用Excel對象

2009-08-13 13:31:13

鎖定對象C# Monitor類
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美一区二区三区在线看 | 国产欧美日韩精品一区二区三区 | 日韩av一区二区在线观看 | 久久久人成影片一区二区三区 | 久久精品一区二区三区四区 | 91社区在线观看高清 | 精品国产乱码久久久久久图片 | 欧美1区2区 | 亚洲超碰在线观看 | 国产精品美女久久久 | 一区二区三区视频在线观看 | 成人av一区 | 国产91在线精品 | 久久久久久亚洲精品 | 欧美v日韩v | 亚洲视频一区二区三区 | a免费观看| 久久成人久久 | 成人水多啪啪片 | 欧美日韩国产在线观看 | 久草热视频 | 欧美一二三区 | 国产精品日韩高清伦字幕搜索 | 中文字幕国产在线 | av在线一区二区三区 | 狠狠草视频| 欧美成人精品一区二区男人看 | 久草福利 | 中文字幕国产 | 少妇午夜一级艳片欧美精品 | 国产japanhdxxxx麻豆| 国产视频一区二区三区四区五区 | 亚洲国产成人精品久久久国产成人一区 | 一区二区三区亚洲 | 黄色一级大片在线免费看产 | 欧美亚洲日本 | www312aⅴ欧美在线看 | 欧美在线国产精品 | 在线视频成人 | 日韩精品一区二区久久 | 在线观看国产精品一区二区 |