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
//---------------------------------------------------------------