⑴ c#裡面怎麼使用gdi的庫
不知道你說的GDI算不算GDI+。
這樣說吧
======調用GDI+
很簡單,System.Drawing
命名空間
就是為GDI+而設計的,用Graphics類進行Draw/Fill函數,就是調用GDI+
======調用GDI
NET中繪圖多是GDI+的,但也有託管下的GDI函數,比如TextRender類就是GDI的,(因為GDI+的DrawString繪圖不精準,因此NET
2.0引入了GDI的TextRender)
也可以直接調用Windows
API中的GDI,用DllImport鏈接gdi32.dll,調用裡面的函數就可以了。
⑵ 如何使用GDI+繪制圖形可按規定路徑前進
C# GDI+編程之基礎篇
一、關於GDI+
從本質上來看,GDI+為開發者提供了一組實現與各種設備(例如監視器,列印機及其它具有圖形化能力但不及涉及這些圖形細節的設備)進行交互的庫函數。GDI+的本質在於,它能夠替代開發人員實現與例如顯示器及其它外設的交互;而從開發者角度來看,要實現與這些設備的直接交互卻是一項艱巨的任務。
下圖1展示了GDI+在開發人員與上述設備之間起著重要的中介作用。其中,GDI+為我們「包辦」了幾乎一切—從把一個簡單的字元串「HelloWorld」列印到控制台到繪制直線,矩形甚至是列印一個完整的表單等。
圖1.GDI+擔當著重要的中介作用
那麼,GDI+是如何工作的呢?為了弄清這個問題,讓我們來分析一個示例—繪制一條線段。實質上,一條線段就是一個從一個開始位置(X0,Y0)到一個結束位置(Xn,Yn)的一系列像素點的集合。為了畫出這樣的一條線段,設備(在本例中指顯示器)需要知道相應的設備坐標或物理坐標。
然而,開發人員不是直接告訴該設備,而是調用GDI+的drawLine()方法,然後,由GDI+在內存(即「視頻內存」)中繪制一條從點A到點B的直線。GDI+讀取點A和點B的位置,然後把它們轉換成一個像素序列,並且指令監視器顯示該像素序列。簡言之,GDI+把設備獨立的調用轉換成了一個設備可理解的形式;或者實現相反方向的轉換。
至此,我們已經簡單了解了GDI+的工作機理。現在,讓我們開始探討如何實現一些基本的圖像操作。
二、圖像操作—縮略圖,縮放與保存
在本文示例中,我們將實現如下的任務:
1. 創建縮略圖。
2. 縮放一個載入的圖像。
3. 保存一個操作中的圖像。
a) 創建縮略圖
縮略圖是圖像的濃縮版本。典型情況下,一幅縮略圖圖像的尺寸為80×200像素。在GDI+中,一個圖像的縮略圖可以通過使用Image類的GetThumbnailImage()方法來創建。其函數原型如下:
public Image GetThumbnailImage (
int thumbWidth,
int thumbHeight,
GetThumbnailImageAbort callback,
IntPtr callbackData
)
第一個參數相應於縮略圖的寬度;第二個參數相應於生成的縮略圖的高度;第三個參數是一個Image.GetThumbnailImageAbort委託。在 GDI+ 1.0 版中不使用此委託。即便如此,也必須創建一個委託並在該參數中傳遞對此委託的引用。第四個參數同樣沒有使用,但是也需要提供以實現兼容性。注意,第四個參數必須為IntPtr.Zero。
如果前兩個參數(也就是寬度和高度)都為0的話,那麼,GDI+返回一個嵌入式縮略圖。否則,使用系統定義尺寸創建該縮略圖。例如,如果img是一個圖像類的實例,並且使用的寬度和高度都是系統定義的,創建一個縮略圖的語句應該如下所示:
Image thumbNailImage = img.GetThumbnailImage(0,0,tnCallBack,IntPtr.Zero);
在此,thumbNailImage包含返回的縮略圖,而tnCallback是一個相應於Image.GetThumbnailImageAbort的函數,其定義如下:
//必須調用它,但是沒有使用
style='font-size:10.0pt;font-family:Verdana'>publicbool tnCallbackMethod()
...{
return false;
}
b) 縮放一個載入的圖像
縮放是放大或縮小一個圖像的過程—通過在圖像尺寸上乘以縮放因子實現。其中,縮放因子=期望的圖像尺寸/當前圖像尺寸。例如,要把一個圖像放大200%,則當前尺寸必須乘以200%(200%=200/100=2);為了縮小一個圖像到25%,則當前尺寸必須乘以25%或0.25(25/100=0.25倍)。
c) 保存圖像
保存操作是圖像操作中的關鍵操作之一。在保存一個圖像時,圖像相應的類型信息也必須進行保存;也就是說,該圖像的擴展名在這一過程中具有重要角色。每一種類型相應於一個特定的格式。實質上,在保存一個圖像時,根據該格式輸出數據是非常必要的。然而,藉助於GDI+ API的優勢,一個對Image類的Save()方法的簡單調用就可以把相應的寫數據操作中所有細節省略掉。這個方法使用兩個參數—被保存的圖像的名字和待保存圖像的格式。該格式能夠通過ImageFormat類提供的類型來指定。下列表格指定了GDI+支持的各種圖像格式。
屬性 描述
Bmp 指定BMP格式。
Emf 指定EMF(增強的元文件格式)。
Exif 指定EXIF格式。
Gif 指定GIF格式。
Guid 指定一個GUID結構,用於描述ImageFormatobject。
Icon 指定Windows圖標格式。
Jpeg 指定JPEG格式。
MemoryBmp 指定內存點陣圖格式。
Png 指定PNG格式。
Tiff 指定TIFF格式。
Wmf 指定WMF(Windows元文件格式)。
其中,Emf和Wmf是特定於Windows系統的。
假定你想使用名字「checker.gif」保存一個圖像,那麼,相應的實現語句將是:
curImage.Save(「checker.gif」,ImageFormat.Gif);
這里,curImage對應於Image類的實例。
在下一節中,我將對前面開發的這個應用程序進行擴展。
三、實際開發中的圖像操作
下面,我們來討論實際中的使用情況。我將在本文示例應用程序中添加下列功能:
1. 以用戶指定的格式保存圖像。
2. 根據從菜單下選擇的百分比放大圖像。
3. 創建一個載入圖像的略縮圖。
相應的菜單操作如下所示:
mnuSave—文件菜單下保存圖像的子菜單。
mnu200Zoom—放大圖像200%。
mnuThumbNail—創建圖像的一個略縮圖。
下面是處理菜單項mnuSave的Click事件相應的方法:
private void mnuSave_Click(object sender,System.EventArgs e)
...{
//如果圖像已經創建
if(curImage == null)
return;
//調用SaveFileDialog對話框
SaveFileDialog saveDlg = new SaveFileDialog();
saveDlg.Title = "Save Image As";
saveDlg.OverwritePrompt = true;
saveDlg.CheckPathExists = true;
saveDlg.Filter =
"Bitmap File(*.bmp)|*.bmp|" +
"Gif File(*.gif)|*.gif|" +
"JPEG File(*.jpg)|*.jpg|" +
"PNG File(*.png)|*.png" ;
saveDlg.ShowHelp = true;
//如果選擇,則進行保存
if(saveDlg.ShowDialog() == DialogResult.OK)
...{
//得到用戶選擇的文件名
string fileName = saveDlg.FileName;
//得到文件擴展名
string strFilExtn =fileName.Remove(0,fileName.Length - 3);
//保存文件
switch(strFilExtn)
...{
case "bmp":
curImage.Save(fileName, ImageFormat.Bmp);
break;
case "jpg":
curImage.Save(fileName, ImageFormat.Jpeg);
break;
case "gif":
curImage.Save(fileName, ImageFormat.Gif);
break;
case "tif":
curImage.Save(fileName, ImageFormat.Tiff);
break;
case "png":
curImage.Save(fileName, ImageFormat.Png);
break;
default:
break;
}
}
}
首先,以可接收的擴展名顯示這個保存對話框。然後,由從該對話框返回的文件名檢索相應的擴展名。最後,根據該擴展名,使用相應的圖像格式參數調用Save()方法。
接下來,我們分析菜單項mnu200Zoom相應的處理器。首先,讓我們在應用程序級添加下列以粗體顯示的一行:
private double curZoom=1.0;
private Image curImage=null;//用於存儲當前圖像
private int i = 0;//用於把屏幕重畫操作與縮略圖繪制部分區別開來
然後,必須對mnuLoad處理代碼作少許調整,如下所示:
private void mnuLoad_Click(object sender,System.EventArgs e)
...{
//創建OpenFileDialog
OpenFileDialog opnDlg = new OpenFileDialog();
//設置一個圖像類型過濾器
opnDlg.Filter =
"All Image files|*.bmp;*.gif;*.jpg;*.ico;"+
"*.emf;,*.wmf|Bitmap Files(*.bmp;*.gif;*.jpg;"+
"*.ico)|*.bmp;*.gif;*.jpg;*.ico|"+
"Meta Files(*.emf;*.wmf;*.png)|*.emf;*.wmf;*.png";
opnDlg.Title = "打開圖像文件";
opnDlg.ShowHelp = true;
//如果OK,選擇它
if(opnDlg.ShowDialog() == DialogResult.OK)
...{
//讀取當前選擇的文件名
curFileName = opnDlg.FileName;
//使用Image.FromFile創建圖像對象
try
...{
curImage = Image.FromFile(curFileName);
}
catch(Exception exp)
...{
MessageBox.Show(exp.Message);
}
}
//改變AutoScrollMinSize屬性
this.AutoScrollMinSize = new Size
((int)(curImage.Width * curZoom),
(int)(curImage.Height * curZoom));
i++;
//重新繪製表單
Invalidate();
}
注意,在此新添加的代碼分別在原來的圖像寬度和高度上乘以放大因子以生成一個放大的圖像。然後,必須相應地修改paint事件的處理器。如下所示:
private void Form1_Paint(object sender, PaintEventArgs e)
...{
if (curImage != null && i==0)
...{
Graphics g = this.CreateGraphics();
g.DrawImage(curImage, new Rectangle
(AutoScrollPosition.X,
AutoScrollPosition.Y ,
(int)(this.ClientRectangle.Width * curZoom),
(int)(ClientRectangle.Height * curZoom)));
}
}
該圖像應該有根據放大因子的相應的高度和寬度。下面,我們來看一下mnu200Zoom菜單項相應的事件處理器:
private void mnu200_Click(object sender,System.EventArgs e)
...{
if(curImage != null)
...{
curZoom = (double)200/100;
i++;
Invalidate();
}
}
最後,我們來看一下mnuThumbNail菜單項相應的事件處理器:
1private void mnuThumbnail_Click(object sender, EventArgs e)
2...{
3if(curImage != null)
4...{
5i++;
6//回調
7Image.GetThumbnailImageAbort tnCallBack =
8new Image.GetThumbnailImageAbort(tnCallbackMethod);
9//得到縮略圖圖像
10Image thumbNailImage = curImage.GetThumbnailImage
11(100, 100, tnCallBack, IntPtr.Zero);
12//創建一個Graphics對象
13Graphics tmpg = this.CreateGraphics();
14tmpg.Clear(this.BackColor);
15//畫縮略圖圖像
16tmpg.DrawImage(thumbNailImage, 10, 10, thumbNailImage.Width, thumbNailImage.Height);
17//釋放掉Graphics對象
18tmpg.Dispose();
19}
20
21}
22
在此,我們首先創建一個GetThumbnailImageAbort類型的變數並且賦給它值tnCallbackMethod()—這是通過傳遞給該方法GetThumbnailImageAbort實現的。然後,它創建一個新的Image類的實例以存儲GetThumbnailImage方法返回的圖像—此後,這個方法將用於把縮略圖繪制到屏幕上。
四、小結
在本文中,我僅討論了.NET C#環境下關於GDI+編程的一些基本的實用操作片斷。在以後的文章中,我們將逐漸展開對.NET GDI+編程高級特徵的探討。
⑶ GDI++的一些使用方法
我用的也是gdi++。。的確跟瑞星和360很對不上路。我建議你在配置中的忽略列表中加入瑞星和360的進程名。
另外。我建議你使用gdi++的氦版。這個版本效果雖然差一點。但兼容性會強很多。
還有,替換宋體的雅黑我建議你使用碧海潮生的1.041版本。這個版本的雅黑字體對一些不配合gdi++的軟體比較好。
可以到極限主題去問問。哪裡高手多.
http://bbs.themex.net
那可以使用gditray的方式載入gdi++啊。
⑷ gdi 怎麼用
會員費用:每月10美金。按照2008年8月27日的中間價,大概相當於68.45元人民幣,一年下來就是821.4元。注意,這只是給傳銷公司的繳費,自己其實還要開通ADSL寬頻上網,還要買電腦,這些費用估計在3000-5000之間吧。
傳銷形式:典型的網路老鼠會,金字塔式,拚命發展下線。
特點:與傳統傳銷不同的是,這種傳銷形式一定要藉助互聯網來完成。對於不上網的人,只能當面說服拉動,最終還是要讓他(她)上網,無意中幫電信發展了不少ADSL用戶,壯大了網民隊伍。呵呵:-)
揭底:說白了,就是拿著一個垃圾東西當作產品,一棒一棒往下交接,直到系統崩潰為止,那個時候,剛剛入夥的傻人就是犧牲品了。為什麼說.WS域名是垃圾?目前國際流行的域名是.com,.net域名,國內流行的是.cn域名,這個.WS域名,僅僅是太平洋島上一個彈丸小國薩摩亞的域名。眼下比較貴的域名,也就一百多塊人民幣一年,.cn域名甚至只要1元人民幣就可以注冊。而.ws域名,作為這個GDI的傳銷產品,卻要800多元人民幣一年,這不是搶錢是什麼?
為了便於傳銷,始作俑者特別發明了每個月付款的形式,以攤薄費用,讓加入的人感覺代價很低。其實,這是世界上最貴和最沒有用的域名了。傳銷者還說,WS是website的縮寫,所以很名貴,其實,英文縮寫多了去了,根本不沾邊的事情,連大家前期一致看好的域名.ME,到現在推廣也是馬馬虎虎,沒有真正能用起來呢。
入這個老鼠會的人,必須要先買一個屬於自己的.ws域名,然後利用GDI公司提供的自助建站系統,可以輕松建立一個宣傳這個產品的忽悠人的網站,其實這個自助建設的站,每個人都是一樣的,就是域名和落款的人名、電話等聯系方式不同而已,以此來區分小老鼠是誰發展出來的,錢分給誰而已。也就是說,你買了這個域名,並不能自己用來做其他的事情,只能為這個傳銷公司做宣傳。萬一真有人說,我要解析到我自己單獨建設的網站去,當然也可以,等於賣給你一個全世界最貴的域名,你還要不斷交錢,他也不虧啊。真正做網站的人,是絕對不會去買一個完全沒有使用價值的域名的,所有買這個域名的人,都是用來招攬下層的小老鼠用的。
想對傳銷者說:收手吧。這個帳怎麼算都算不過來的。拿著一個垃圾產品去忽悠人,等於是在用自己的良心換錢,完全不值得的。再說了,真的能掙到錢嗎?掙不到的!就算你一年內發展了一萬個下線(那是不現實的),一個月的總收入才六十多萬,真正分到你手上有多少?一年如果真的能發展一萬下線,那你肯定是個絕對的營銷高手,做正行完全能比干傳銷掙的更多,更乾凈。
何苦趟這趟渾水呢?
更多網路賺錢騙局:http://american-gdi.tk
⑸ MFC中如何使用GDI+繪制出圖形
1、可以在內存中建立一張緩存圖片,然後在這個圖片上畫你需要的圖,然後輸出到窗體,這樣你可以直接保存成圖片了。
2、畫在bitmap上
bitmap有save方法
創建graphics的時候用:Graphics.FromImage().
⑹ 請教該怎麼使用GDI+控制項
創建自定義控制項的3種主要實現方式:
1)繼承已有的控制項來實現自定義控制項: 主要是當要實現的控制項和已有的控制項在很多方面比較類似, 通過對已有控制項的擴展來滿足要求。
2)通過繼承一個布局文件實現自定義控制項,一般來說做組合控制項時可以通過這個方式來實現。
注意此時不用onDraw方法,在構造廣告中通過inflater載入自定義控制項的布局文件,再addView(view),自定義控制項的圖形界面就載入進來了。
3)通過繼承view類來實現自定義控制項,使用GDI繪制出組件界面,一般無法通過上述兩種方式來實現時用該方式。
⑺ c#中GDI 如何用
不知道你說的GDI算不算GDI+。
這樣說吧
======調用GDI+
很簡單,System.Drawing命名空間就是為GDI+而設計的,用Graphics類進行Draw/Fill函數,就是調用GDI+
======調用GDI
NET中繪圖多是GDI+的,但也有託管下的GDI函數,比如TextRender類就是GDI的,(因為GDI+的DrawString繪圖不精準,因此NET 2.0引入了GDI的TextRender)
也可以直接調用Windows API中的GDI,用DllImport鏈接gdi32.dll,調用裡面的函數就可以了。
⑻ 如何使用GDI繪制半透明矩形
HDC hBitmapDC = CreateCompatibleDC(hDC);
HBITMAP hBitmap = CreateCompatibleBitmap(hDC, rt.Width(), rt.Height());
SelectObject(hBitmapDC,hBitmap);
步驟2)在內存DC中繪圖
FillRgn(hBitmapDC, (HRGN)rgn, (HBRUSH)m_pGdiBrush);
Rectangle(hBitmapDC, 0, 0, 100, 100);
步驟3) 半透明混合
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.AlphaFormat = 0;
bf.SourceConstantAlpha = 50;
AlphaBlend(hDC,rt.left,rt.top,rt.Width(),rt.Height(),hBitmapDC,0,0,rt.Width(),rt.Height(),bf);
2、GDI+
步驟1) 創建半透明畫刷
m_pBrush = new SolidBrush(Color(128, GetRValue(clrMask), GetGValue(clrMask), GetBValue(clrMask))); // 透明度 128
步驟2)使用畫刷繪圖
Graphics graphics(hDC);
graphics.FillPolygon(&m_pBrush, pts, 3, FillModeAlternate);
效率: GDI+ GDI。
使用GDI+繪圖簡單而高效,所以推薦使用GDI+。
3、Direct Draw
此方法比較復雜,沒有對Direct Draw有一定的了解,不推薦此方法。
代碼比較多,不做列舉,需要注意的地方有:
使用Direct Draw時,注意,繪制半透明多邊形的時候,因為牽涉到已有的圖像數據,所以會對繪圖頁面原有的圖像進行讀取操作。如果當前繪制頁面開辟在顯存中的時候,
對顯存的讀操作會導致整個渲染流水線的暫停,
從而嚴重影響程序的效率,此時,繪制半透明多邊形就會變得異常的慢。這時候需要將繪制頁面從顯存中更改至內存中。或者在內存中創建一個過度頁面,繪制完成後再往顯存頁面上貼圖。效率會有顯著提升,實測:
⑼ GDI 繪圖流程(如何繪制簡單的幾何圖形)
一、獲得繪圖的窗口句柄
方法(詳細參數及其調用可以看考MSDN):
1、 HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName)
HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)
2、 HWND WindowFromPoint(POINT& Point)
3、 BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
BOOL CALLBACK EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc,LPARAM lParam)
BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
二、由窗口句柄得到設備環境句柄HDC
方法:BeginPaint、GetWindowDC、GetDC。這些函數都需要步驟一中的HWND的句柄。調用這些函數後要釋放句柄,相應的有EndPaint、ReleaseDC進行清理。
1、 採用BeginPaint獲取HDC
HDC hdc;
PAINTSTRUCT ps;// 保存
hdc = ::BeginPaint( hwnd, &ps );
// 此處添加繪圖代碼
::EndPaint( hwnd, &ps );
說明:獲得的hdc的有效區域僅限於客戶區無效區域的設備環境句柄,不包括標題欄、邊框等。
2、 採用GetWindowDC獲取HDC
HDC hdc = ::GetWindowDC( hwnd );
// 此處添加繪圖代碼
::ReleaseDC( hwnd, hdc );
說明:繪制區域是整個窗口(邊框、標題欄、客戶區的總和)。
3、 採用GetDC獲取HDC
HDC hdc = ::GetDC( hwnd );
// 此處添加繪圖代碼
::ReleaseDC( hwnd, hdc );
說明:獲得的hdc的有效區域僅限於客戶區有效區域的設備環境句柄,不包括標題欄、邊框等。
三、圖形繪制方法
1、 畫筆CreatePen
繪畫之前先選擇畫筆,畫筆的功能主要是繪制邊框,其函數原型如下:
WINGDIAPI HPEN WINAPI CreatePen(
__in int iStyle, // 畫筆的類型,比如是實線,還是虛線等等。
__in int cWidth, // 線的寬度。
__in COLORREF color // 線的顏色。
);
// iStyle參數可選值:
PS_SOLID = 0;// 實線
PS_DASH = 1;// 段線; 要求筆寬<=1
PS_DOT = 2;// 點線; 要求筆寬<=1
PS_DASHDOT = 3;// 線、點; 要求筆寬<=1
PS_DASHDOTDOT = 4;// 線、點、點; 要求筆寬<=1
PS_NULL = 5;// 不可見
PS_INSIDEFRAME = 6;// 實線; 但筆寬是向里擴展
返回值為畫筆類型,SelectObject函數選中。選中後,返回原來畫刷的句柄用來恢復時使用。圖形繪制完畢後使用DeleteObject函數將其釋放。
SelectObject函數說明:
函數功能:該函數選擇一對象到指定的設備上下文環境中,該新對象替換先前的相同類型的對象。
函數原型:HGDIOBJ SelectObject(HDC hdc, HGDIOBJ hgdiobj);
參數:
hdc:設備上下文環境的句柄。
hgdiobj:被選擇的對象的句型,該指定對象必須由如下的函數創建。
點陣圖:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection(只有內存設備上下文環境可選擇點陣圖,並且在同一時刻只能一個設備上下文環境選擇點陣圖)。
畫筆:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush。
字體:CreateFont, CreateFontIndirect。
筆:CreatePen, CreatePenIndirect。
區域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect。
返回值:如果選擇對象不是區域並且函數執行成功,那麼返回值是被取代的對象的句柄;如果選擇對象是區域並且函數執行成功,返回如下一值;
DeleteObject函數說明:
函數功能:該函數刪除一個邏輯筆、畫筆、字體、點陣圖、區域或者調色板,釋放所有與該對象有關的系統資源,在對象被刪除之後,指定的句柄也就失效了。
函數原型:BOOL DeleteObject(HGDIOBJ hObject);
參數:
hObject:邏輯筆、畫筆、字體、點陣圖、區域或者調色板的句柄。
返回值:成功,返回非零值;如果指定的句柄無效或者它已被選入設備上下文環境,則返回值為零。
2、 畫刷
畫刷的功能主要是填充區域內的顏色,創建畫刷的方法如下:
A、CreateSolidBrush函數
函數功能:該函數創建一個具有指定顏色的邏輯刷子。
函數原理:HBRUSH CreateSolidBrush(COLORREF crColor);
參數:
crColor:指定刷子的顏色。
返回值:如果該函數執行成功,那麼返回值標識一個邏輯實心刷子;如果函數失敗,那麼返回值為NULL。
B、GetStockObject函數
函數功能:該函數檢索預定義的備用筆、刷子、字體或者調色板的句柄。
函數原型:HGDIOBJ GetStockObject(int fnObject);
參數:
fnObject:指定對象的類型,該參數可取如下值之一;
BLACK_BRUSH:黑色畫筆;
DKGRAY_BRUSH:暗灰色畫筆;
DC_BRUSH:在Windows98,Windows NT 5.0和以後版本中為純顏色畫筆,預設色為白色,可以用SetDCBrushColor函數改變顏色,更多的信息參見以下的注釋部分。
GRAY_BRUSH:灰色畫筆;
HOLLOW_BRUSH:空畫筆(相當於HOLLOW_BRUSH);
LTGRAY_BRUSH:亮灰色畫筆;
NULL_BRUSH:空畫筆(相當於HOLLOW_BRUSH);
WHITE_BRUSH:白色畫筆;BLACK_PEN:黑色鋼筆;
DC_PEN:在Windows98、Windows NT 5.0和以後版本中為純色鋼筆,預設色為白色,使用SetDCPenColor函數可以改變色彩,更多的信息,參見下面的注釋部分。
WHITE_PEN:白色鋼筆;
ANSI_FIXED_FONT:在Windows中為固定間距(等寬)系統字體;
ANSI_VAR_FONT:在Windows中為變間距(比例間距)系統字體;
DEVICE_DEFAUCT_FONT:在WindowsNT中為設備相關字體;
DEFAULT_GUI_FONT:用戶界面對象預設字體,如菜單和對話框;
OEM_FIXED_FONT:原始設備製造商(OEM)相關固定間距(等寬)字體;
SYSTEM_FONT:系統字體,在預設情況下,系統使用系統字體繪制菜單,對話框控制和文本;
SYSTEM_FIXED_FONT:固定間距(等寬)系統字體,該對象僅提供給兼容16位Windows版本;
DEFAULT_PALETTE:預設調色板,該調色板由系統調色板中的靜態色彩組成。
返回值:如果成功,返回值標識聲請的邏輯對象,如果失敗,返回值為NULL。
C、CreateHatchBrush函數
函數功能:該函數可以創建一個具有指定陰影模式和顏色的邏輯刷子。
函數原型:HBRUSH CreateHatchBrush(int fnStyle, COLORREF clrref);
參數:
fnStyle:指定刷子的陰影樣式。該參數可以取下列值,這些值的含義為:
HS_BDIAGONAL:表示45度向下,從左至右的陰影;
HS_CROSS:水平和垂直交叉險影;
HS_DIAGCROSS:45度交叉陰影;
HS_FDIAGONAL:45度向上,自左至右陰影;
HS_HORIZONTAL:水平陰影;
HS_VERTICAL:垂直陰影。
cirref:指定用於陰影的刷子的前景色。
返回值:如果函數執行成功,那麼返回值標識為邏輯刷子;如果函數執行失敗,那麼返回值為NULL。
畫刷的選中和釋放,請參照畫筆。
3、 點SetPixel
函數功能:該函數將指定坐標處的像素設為指定的顏色。
函數原型:COLORREF SetPixel(HDC hdc, int X, int Y, COLORREF crColor);
參數:
hdc:設備環境句柄。
X:指定要設置的點的X軸坐標,按邏輯單位表示坐標。
Y:指定要設置的點的Y軸坐標,按邏輯單位表示坐標。
crColor:指定要用來繪制該點的顏色。
返回值:如果函數執行成功,那麼返回值就是函數設置像素的RGB顏色值。這個值可能與crColor指定的顏我色有不同,之所以有時發生這種情況是因為沒有找到對指定顏色進行真正匹配造成的;如果函數失敗,那麼返回值是C1。
4、 直線MoveToEx、LineTo
A、 MoveToEx
函數功能:將當前位置指定為特定的某一點
函數原型:BOOL MoveToEx( __in HDC hdc, __in int X, __in int Y, __out LPPoint lpPoint )
參數:
hdc:設備環境句柄。
X:指定要設置的點的X軸坐標,按邏輯單位表示坐標。
Y:指定要設置的點的Y軸坐標,按邏輯單位表示坐標。
lpPoint:指向一個POINT結構,用來接收前一位置,為空時,當前位置不被返回。
返回值:執行成功返回非零,否則返回值為零。
B、 LineTo
函數功能:從當前點到目標點進行畫線。
函數原型:BOOL LineTo( int x, int y )
參數說明:
X:目標點的橫坐標。
Y:目標點的縱坐標。
返回值:成功非零,其它返回零。
5、 矩形Rectangle
函數功能:該函數畫一個矩形,用當前的畫筆畫矩形輪廓,用當前畫刷進行填充。
函數原型:BOOL Rectangle(HDC hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
參數:
hdc:設備環境句柄。
nLeftRect:指定矩形左上角的邏輯X坐標。
nTopRect:指定矩形左上角的邏輯Y坐標。
nRightRect:指定矩形右下角的邏輯X坐標。
nBottomRect:指定矩形右下角的邏輯Y坐標。
返回值:如果函數調用成功,返回值非零,否則返回值為0。
6、 橢圓Ellipse
函數功能:該函數畫一個橢圓形,用當前的畫筆畫矩形輪廓,用當前畫刷進行填充。
函數原型:BOOL Ellipse( HDC hdc, int x1, int y1, int x2, int y2 )
參數:
hdc:設備環境句柄。
x1:指定橢圓形左上角的邏輯X坐標。
y1:指定橢圓形左上角的邏輯Y坐標。
x2:指定橢圓形右下角的邏輯X坐標。
y2:指定橢圓形右下角的邏輯Y坐標。
返回值:如果函數調用成功,返回值非零,否則返回值為0。
GDI含義是圖形設備介面,主要任務是負責系統與繪圖程序之間的信息交換,處理所有Windows程序的圖形輸出。GDI的出現使程序員無需要關心硬體設備及設備驅動,就可以將應用程序的輸出轉化為硬體設備上的輸出,實現了程序開發者與硬體設備的隔離,大大方便了開發工作。
⑽ GDI 英文括弧 變成中文括弧
在開發WTL程序時,我們有時候會容易混合使用GDI和GDI+,比如使用GDI的CDC的方法RoundRect繪制圓角矩形,而GDI+沒有類似的方法。同樣,使用GDI+輕松繪制png圖片,而GDI繪制需要繁瑣的轉換。但是,實際上,微軟MSDN文檔說明GDI和GDI+是不能混用的,上邊的繪制不出來中文就是混用導致的結果之一。