GradientFill
函数原型:BOOL GradientFill(HDC hdc, CONST PTRIVERTEX pVertex, DWORD dwNumVertex, CONST PVOID pMesh, DWORD dwNumMesh, DWORD dwMode);
参数:
hdc:指向目标设备环境的句柄。
pVertex:指向TRIVERTEX结构数组的指针,该数组中的每项定义了三角形顶点。
dwNumVertex:顶点数目。
pMesh:三角形模式下的GRADIENT_TRIANGLE结构数组,或矩形模式下的GRADIENT_RECT结构数组。
dwNumMesh:参数pMesh中的成员数目(这些成员是三角形或矩形)。
dwMode:指定倾斜填充模式。该参数可以包含下列值,这些值的含义为:
GRADIENT_FILL_RECT_H:在该模式下,两个端点表示一个矩形。该矩形被定义成左右边界具有固定颜色(由TRIVERTEX结构指定)。GDI从上至下插入颜色,并填充内部区域。
GRADIENT_FILL_RECT_V:在该模式下,两个端点表示一个矩形。该矩形定义其顶部和底部边界的颜色为固定值(通过TRIVERTEX结构指定),GDI从顶至底部边界插入颜色,并填充内部区域。
GRADIENT_FILL_TRIANGLE:在该模式下,TRIVERTEX结构数组以及描述单个三角形的数组索引序列被传给GDI。GDI在三角形顶点之间进行线性插值,并填充内部区域。在24和32位/像素模式下,绘图是直接进行。在16、8、4和1位/像素模式中进行抖动处理。
返回值:如果函数执行成功,那么返回值为TRUE;如果函数执行失败,则返回值为FALSE。
Windows NT:若想获得更多错误信息,请调用GetLastError函数。
备注:若想在矩形区域中加入一些平滑的阴影(底纹),请用三角形的三个顶点调用GradientFill函数。CDI将进行线性插值,并填充矩形区域。在绘制矩形时可能使用两种阴影模式在水平模式中,矩形从左至右开始变暗,在垂直模式中则是从上至下进行。
GradientFill函数使用网眼法(mesh method)来表示要绘制对象的端点。所有传给GradientFill的顶点都存储在pVertex数组中。参数pMesh指定了这些顶点如何连接形成一个对象。当填充矩形时,pMesh指向一个GRADIENT_RECT结构数组。每一个GRADIENT_RECT结构指定了pVertex数组中两个顶点的索引值,这两个顶点形成一个矩形的左上角和右下角坐标。
在填充三角形情况下,pMesh指向的是GRADIENT_TRIANGLE结构数组。每一个GRADIENT_TRIANGLE结构指定了pVertex数组中的3个顶点,这三个顶点形成一个三角形。
为了简化硬件加速,无需要求该例程在三角形内部具有像素完善特性。
若想了解更多信息,参考平滑成影、绘制带阴影的三解和矩形等方面的内容。
速查:Windows NT:5.0及以上版本;Windows:98及以上版本;Windows CE 5.0以上:支持;头文件:wingdi.h;库文件:作为一个资源包含在msimg32.dll中。
GRADIENT_RECT
ULONG UpperLeft;
ULONG LowerRight;
}GRADIENT_RECT, *PGRADIENT_RECT;
每一个GRADIENT_RECT结构指定了pVertex数组中两个顶点的索引值,这两个顶点形成一个矩形的左上角和右下角坐标。
void CTestDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialog::OnPaint();
CPaintDC dc(this); // device context for painting
//图1
TRIVERTEX vert[2] ;
GRADIENT_RECT gRect;
vert [0] .x = 10;
vert [0] .y = 10;
vert [0] .Red = 0xad00;
vert [0] .Green = 0x0000;
vert [0] .Blue = 0x0000;
vert [0] .Alpha = 0x0000;
vert [1] .x = 100;
vert [1] .y = 32;
vert [1] .Red = 0x0000;
vert [1] .Green = 0x0000;
vert [1] .Blue = 0x9c00;
vert [1] .Alpha = 0x0000;
gRect.UpperLeft = 0;
gRect.LowerRight = 1;
GradientFill(dc.m_hDC,vert,2,&gRect,1,GRADIENT_FILL_RECT_H);
//图2
TRIVERTEX vert2[2] ;
GRADIENT_RECT gRect2;
vert2 [0] .x = 10;
vert2 [0] .y = 50;
vert2 [0] .Red = 0x0000;
vert2 [0] .Green = 0xad00;
vert2 [0] .Blue = 0x0000;
vert2 [0] .Alpha = 0x0000;
vert2 [1] .x = 100;
vert2 [1] .y = 72;
vert2 [1] .Red = 0x9c00;
vert2 [1] .Green = 0x0000;
vert2 [1] .Blue = 0x0000;
vert2 [1] .Alpha = 0x0000;
gRect2.UpperLeft = 0;
gRect2.LowerRight = 1;
GradientFill(dc.m_hDC,vert2,2,&gRect2,1,GRADIENT_FILL_RECT_V);
//图3
TRIVERTEX vert3 [4] ;
GRADIENT_TRIANGLE gTri3[2];
vert3 [0] .x = 10;
vert3 [0] .y = 90;
vert3 [0] .Red = 0x0000;
vert3 [0] .Green = 0x0000;
vert3 [0] .Blue = 0x0000;
vert3 [0] .Alpha = 0x0000;
vert3 [1] .x = 100;
vert3 [1] .y = 90;
vert3 [1] .Red = 0x0000;
vert3 [1] .Green = 0x0000;
vert3 [1] .Blue = 0xff00;
vert3 [1] .Alpha = 0x0000;
vert3 [2] .x = 100;
vert3 [2] .y = 122;
vert3 [2] .Red = 0x0000;
vert3 [2] .Green = 0x0000;
vert3 [2] .Blue = 0xff00;
vert3 [2] .Alpha = 0x0000;
vert3 [3] .x = 10;
vert3 [3] .y = 122;
vert3 [3] .Red = 0xff00;
vert3 [3] .Green = 0xff00;
vert3 [3] .Blue = 0xff00;
vert3 [3] .Alpha = 0x0000;
gTri3[0].Vertex1 = 0;
gTri3[0].Vertex2 = 1;
gTri3[0].Vertex3 = 2;
gTri3[1].Vertex1 = 0;
gTri3[1].Vertex2 = 2;
gTri3[1].Vertex3 = 3;
GradientFill(dc.m_hDC,vert3,4,&gTri3,2,GRADIENT_FILL_TRIANGLE);
}
}
No comments:
Post a Comment