⑴ 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+是不能混用的,上边的绘制不出来中文就是混用导致的结果之一。