您的位置:首页 > 其它

windows画图常用函数 二

2012-06-10 07:28 183 查看
SetMapMode()

简介

  函数功能描述:该函数设置指定设备环境的映射方式,映射方式定义了将逻辑单位转换为设备单位的度量单位,并定义了设备的X、Y轴的方向。

  函数原型:int SetMapMode(HDC hdc, int fnMapMode);

编辑本段

参数:

  hdc:指向设备环境的句柄。

  fnMapMode:指定新的映射方式,此参数可以是下面列出的任何一个值。

  MM_ANISOTROPIC:逻辑单位转换成具有任意比例轴的任意单位,用SetWindowExt和SetViewportExt函数可指定单位、方向和比例。

  MM_HIENGLISH:每个逻辑单位转换为0.001英寸,X的正方向向右,Y的正方向向上。

  MM_HIMETRIC:每个逻辑单位转换为0.01毫米,X正方向向右,Y的正方向向上。

  MM_ISOTROPIC:逻辑单位转换成具有均等比例轴的任意单位,即沿X轴的一个单位等于沿Y轴的一个单位,用SetWindowExt和SetViewportExt函数可以指定该轴的单位和方向。图形设备界面(GDI)需要进行调整,以保证X和Y的单位保持相同大小(当设置窗口范围时,视口将被调整以达到单位大小相同)。

  MM_LOENGLISH:每个逻辑单位转换为0.01英寸,X正方向向右,Y正方向向上。

  MM_LOMETRIC:每个逻辑单位转换为0.1毫米,X正方向向右,Y正方向向上。

  MM_TEXT:每个逻辑单位转换为一个图素,X正方向向右,Y正方向向下。

  MM_TWIPS;每个逻辑单位转换为打印点的1/20(即1/1400英寸),X正方向向右,Y方向向上。

  返回值:如果函数调用成功,返回值指定先前的映射方式,否则,返回值为零,若想获得更多错误信息,请调用GetLastError函数。

详见:http://baike.baidu.com/view/1031335.htm

//---------------------------------------------------------------

SetWindowExtEx()

函数原型:

  BOOL SetWindowExtEx( __in HDC hdc, __in int nXExtent, __in int nYExtent, __out LPSIZE lpSize);

参 数:

  HDC

  A到设备上下文句柄。

  nXExtent

  窗口的水平范围的逻辑单位。

  nYExtent

  窗口的垂直程度的逻辑单位。

  lpSize[输出]

  一个指向指针的尺寸在逻辑结构,接收单位的上一个窗口范围。如果lpSize是NULL,这个参数是无法使用。

编辑本段

返回值

  如果函数成功,返回值为非零。

  如果函数失败,返回值为零。

详见:http://baike.baidu.com/view/3353830.htm

//---------------------------------------------------------------

SetViewportExtEx()

  函数功能:该函数用指定的值来设置指定设备环境坐标的X轴、Y轴范围。

  函数原型:BOOL SetViewportExtEx(HDC hdc, int nXExtent, int nYExtent, LPSIZE lpSize);

  参数:

  hdc:指向设备描述表的句柄。

  nXExtent:指定观察口以设备单位为单位的水平轴的范围。

  nYExent:指定观察口以设备单位为单位的垂直轴的范围。

  lpSize:指向Size结构的指针,先前的设备单位为单位的视口范围存放在此结构中,如lpSize值为NULL,则什么也没返回。

  返回值:如果函数调用成功,返回值为非零值,否则为零。

  备注:当设置下面的映射方式时,对函数SetWindowExtEx和SetViewportExtEx的调用被忽略:

  MM_HIENGLISH; MM_HIMETRIC; MM_LOENGLISH; MM_LOMETRIC; MM_TEXT; MM_TWIPS

  当设置MM_ISOTROPIC方式时,应用程序在调用SetViewportExtEx之前必须调用SetWindowExtEx函数。

  速查:Windows NT:3.1及以上版本;Windows:95及以上版本;Windows CE:不支持;头文件:wingdi.h;库文件:gdi32.lib。

详见:http://baike.baidu.com/view/1080513.htm

//---------------------------------------------------------------

SetViewportOrgEx()

简介:

  SetViewportOrgEx说明哪个设备点映射到窗口原点(0,0)

  BOOL SetViewportOrgEx(

  HDC hdc, // 设备内容HANDLE

  int X, // 新Viewport的x坐标

  int Y, // 新Viewport的y坐标

  LPPOINT lpPoint // 原来的Viewport的坐标

  );

  参数:

  hdc:[输入]设备内容的HANDLE

  X:[输入]新的viewport原点的设备单位的x坐标

  Y:[输入]新的viewport原点的设备单位的y坐标

  lpPoint:

  [输出]指向一个POINT结构用来接收原先的viewport原点坐标,坐标是设备单位的。如果lpPoint是NULL,这个参数不使用。

  返回值:

  如果返回成功返回非0,如果失败,返回0。

  备注:

  这个函数(连同SetViewportExtEx和SetWindowExtEx)帮助定义逻辑坐标空间(也就是一个窗口)到设备坐标空间映射(viewport)。SetViewPortOrgEx指定哪个设备点映射到逻辑点(0,0).它有移动坐标轴的功能,从而使逻辑点(0,0)不再指向左上角了。

  //映射逻辑点 (0,0) 到设备点 (xViewOrg, yViewOrg)

  SetViewportOrgEx ( hdc, xViewOrg, yViewOrg, NULL)

  这就是SetViewportOrgEx的作用。总的来说,你使用一个函数或另一个函数,但不能都使用,而不管你使用SetWindowOrgEx还是SetViewportOrgEx,设备点(0,0)总是在左上角。

详见:http://baike.baidu.com/view/1031341.htm

//---------------------------------------------------------------

CreatePen()

  [声明]

  BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor);

  BOOL CreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush,

  int nStyleCount = 0, const DWORD* lpStyle = NULL); 

  [说明]

  用指定的样式、宽度和颜色创建一个画笔

  [参数表]

  nPenStyle ------ Long,指定画笔样式,可以是下述常数之一

  PS_SOLID

  画笔画出的是实线

  PS_DASH

  画笔画出的是虚线(nWidth必须是1)

  PS_DOT

  画笔画出的是点线(nWidth必须是1)

  PS_DASHDOT

  画笔画出的是点划线(nWidth必须是1)

  PS_DASHDOTDOT

  画笔画出的是点-点-划线(nWidth必须是1)

  PS_NULL

  画笔不能画图

  PS_INSIDEFRAME

  画笔在由椭圆、矩形、圆角矩形、饼图以及弦等生成的封闭对象框中画图。如指定的准确RGB颜色不存在,就进行抖动处理

  nWidth --------- Long,以逻辑单位表示的画笔的宽度

  crColor -------- Long,画笔的RGB颜色

  [返回值]

  Long,如函数执行成功,就返回指向新画笔的一个句柄;否则返回零

  [其它]

  一旦不再需要画笔,记得用DeleteObject函数将其删除

  示例:

  采用GDI绘图

  HDC hdc;//设备场景DC

  PAINTSTRUCT ps;

  HEPN hPen;

  HPEN hPenOld;

  hdc = BeginPaint( hWnd , &ps );

  hPen = CreatePen( PS_SOLID , 3 , RGB( 255 , 0 , 0 );

  hPenOld = ( HPEN )SelectObject ( hdc , hPen );

  MoveToEx ( hdc , 20 , 10 , NULL );

  LineTo( hdc , 200 ,100);

  SelectObject (hdc , hOldPen);

  DeleteObject ( hPen );

  EndPaint ( hWnd , &ps );

详见:http://baike.baidu.com/view/1706960.htm?fromTaglist

//---------------------------------------------------------------

TextOut()

函数功能

  该函数用当前选择的字体、背景颜色和正文颜色将一个字符串写到指定位置。

编辑本段

使用方法

函数原型

  BOOL TextOut(

  HDC hdc, // 设备描述表句柄

  int nXStart, // 字符串的开始位置 x坐标

  int nYStart, // 字符串的开始位置 y坐标

  LPCTSTR lpString, // 字符串

  int cbString // 字符串中字符的个数

  );

参数

  hdc

  [输入] 设备环境的句柄

  nXStart

  [输入] 指定用于字符串对齐的基准点的逻辑X坐标。

  nYStart

  [输入] 指定用于字符串对齐的基准点的逻辑Y坐标。

  lpString

  [输入] 指向将被绘制字符串的指针。此字符串不必为以\0结束的,因为cbString中指定了字符串的长度。

  cbString

  [输入] 指定了字符串的长度。

返回值

  如果函数调用成功,返回值为非零值。

  如果函数调用失败,返回值为0。

  Windows NT:若想获得更多错误信息,请调用GetLastError函数。

详见:http://baike.baidu.com/view/1080789.htm

//---------------------------------------------------------------

SetBkColor()

函数功能

  该函数用指定的颜色值来设置当前的背景色,如果指定的颜色值超出了当前设备的表示范围,则设置为最近似的、设备可以表示的颜色。

编辑本段

函数原型

  COLORREF SetBkColor( HDC hdc, COLORREF crColor );

编辑本段

参数说明

  hdc: 设置上下文句柄

  crColor: 标识新的背景颜色值。如果想要获得COLORREF的值,请使用RGB宏。

编辑本段

返回值

  如果函数成功,返回值是原背景色的COLORREF值。如果函数失败,则返回CLR_INVALID。想要获得更多信息,请调用GetLastError函数。

  速查:

  Windows NT/2000: 需要 Windows NT 3.1 或更高版本.

  Windows 95/98: 需要 Windows 95 或更高版本.

  Header: 在头文件Wingdi.h中声明;请包含 Windows.h.

  Library: Use Gdi32.lib.程序例

详见:http://baike.baidu.com/view/1983872.htm

//---------------------------------------------------------------

SetBkMode()

基本概述

原型:

  一是MFC里面封装的CDC类:

  CDC::SetBkMode

  int SetBkMode( int nBkMode );

  API函数SetBkMode声明如下:

  int SetBkMode(

  HDC hdc, // handle of device context

  int iBkMode // flag specifying background mode

  );

参数:

  hDC是当前设备的句柄。

  mode是要设置的模式,其值可以为OPAQUE和TRANSPARENT。

  输出的字符串时,发现存在背景色,这样的输出是破坏背景的。那需要使用什么方法来保持背景不变,而又能输出红色的字符串呢?比如按钮的文字颜色是黑色的,而背景是灰色的。这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUE和TRANSPARENT。OPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,也就是文字的背景是不改变的。

  对透明的理解:在窗体或控件输出的字符串或图形是有背景色的。而窗体或控件也是有背景色的。这两种背景色一般是不同的, 这样输出图形或字符串时,两种背景(窗体或控件的背景色、符串或图形的背景色)重叠在一起了,影响美观,为了不让这两种背景重叠,可以设置背景模式为TRANSPARENT(透明的),即让输出的字符串或图形的背景色不可见。可以这样理解:把输出的字符串或图形的背景色看成是一物体,窗体或控件看成另一物体,字符串或图形在窗体或控件前面挡住窗体或控件了(因为输出 的字符串或图形是画在窗体或控件上的,所以可以这么类比),但是透过字符串或图形能看到窗体或控件。即字符串或图形的背
景色所代表的物体是透明的。

编辑本段

SetBkMode与SetBkColor理解

  以前总不是太明白这几者之间的关系:SetBkMode, SetBkColor, wndclass.hbrBackground,

  说实在的, 还是拿程序说话, 写个程序就能明白了……

  我们以前一次的一个程序来说明:

  /* 画笔练习程序, by netrookie, ChinaUnix.

  * 请参考《windows程序设计》第五章:图形基础,画笔部分

详见:http://baike.baidu.com/view/1877315.htm

//---------------------------------------------------------------

SetTextColor()

函数名 SetTextColor()

  功能 设置指定设备环境(HDC)的字体颜色

  说明 Windows API函数

  原型 WINGDIAPI COLORREF WINAPI SetTextColor (HDC, COLORREF)

  也可以理解成 DWORD SetTextColor (HDC, DWORD),其中DWORD是关于颜色的参数,常用RGB()获取

  例如:

  SetTextColor(HDC,RGB(255,0,0));

  当然设备环境(HDC)要通过BeginPaint(HWND,&PAINTSTRUCTURE)或GetDC(HWND)获得。

  SetTextColor(int r [, int g, int b])

  版本

  1.3

  内容

  定义文字使用的颜色。可以使用RGB色彩或灰阶模式来定义。这个功能可以在一页之前建立,而且那个色彩值会保留在一页到另一页。

  参数

  r

  若果g 和 b有提供数值,这个功能就是(红色的色彩)。如果没有提供任何数据在g 和 b,这个功能就是(灰阶的色彩). 数值为 0 至 255 之间。

  g

  绿色的色彩 (0 至 255 之间).

  b

  蓝色的色彩 (0 至 255 之间).

详见:http://baike.baidu.com/view/1751398.htm

//---------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: