windows画图常用函数 二

来源:互联网 发布:网络磁盘 编辑:程序博客网 时间:2024/05/16 15:12

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

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