MFC中如何给倾斜矩形填充颜色

时间:2022-09-19 06:17:35
我在MFC中画了一个倾斜的矩形,已知矩形的四个点,如何给矩形填充颜色!求代码,谢谢

8 个解决方案

#1


D2D的话用个旋转矩阵就行了 MFC中如何给倾斜矩形填充颜色,GDI的话估计只能自己算了

#2


用连通区域RGN定义矩形区域,然后填充颜色。

#3


“plgblt.zip”
http://download.csdn.net/detail/schlafenhamster/3343102
“微软的例子,用vc60编译,说明plgblt的使用方法”

#4


在mfc里边可以用gdi 或者 gdi+的drawpath
思路是把你旋转以后的矩形4个点求出来转成路径然后画。

这个方法可以来画任意不规则形状

#5


FloodFill
The FloodFill function fills an area of the display surface with the current brush. The area is assumed to be bounded as specified by the crFill parameter. 

Note  The FloodFill function is included only for compatibility with 16-bit versions of Windows. For Win32-based applications, use the ExtFloodFill function with FLOODFILLBORDER specified. 

BOOL FloodFill(
  HDC hdc,          // handle to device context
  int nXStart,      // x-coordinate, where fill begins
  int nYStart,      // y-coordinate, where fill begins
  COLORREF crFill   // fill color
);
 
Parameters
hdc 
Handle to a device context. 
nXStart 
Specifies the logical x-coordinate of the point where filling is to begin. 
nYStart 
Specifies the logical y-coordinate of the point where filling is to begin. 
crFill 
Specifies the color of the boundary or of the area to be filled. 
Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. 

Windows NT: To get extended error information, callGetLastError. 

Remarks
Following are reasons this function might fail: 

The fill could not be completed. 
The given point has the boundary color specified by the crFill parameter. 
The given point lies outside the current clipping region — that is, it is not visible on the device. 
See Also
Bitmaps Overview, Bitmap Functions, ExtFloodFill 

 

#6


CDC::FloodFill  
BOOL FloodFill( int x, int y, COLORREF crColor );

Return Value

Nonzero if the function is successful; otherwise 0 is returned if the filling could not be completed, the given point has the boundary color specified by crColor, or the point is outside the clipping region.

Parameters

x

Specifies the logical x-coordinate of the point where filling begins.

y

Specifies the logical y-coordinate of the point where filling begins.

crColor

Specifies the color of the boundary.

Remarks

Fills an area of the display surface with the current brush. The area is assumed to be bounded as specified by crColor. The FloodFill function begins at the point specified by x and y and continues in all directions to the color boundary. 

Only memory-device contexts and devices that support raster-display technology support the FloodFill member function. For information about RC_BITBLT capability, see the GetDeviceCaps member function. 

The ExtFloodFill function provides similar capability but greater flexibility.

CDC Overview |  Class Members |  Hierarchy Chart

See Also   CDC::ExtFloodFill, CDC::GetDeviceCaps,::FloodFill 

#7


看看这篇文章会不会对你有帮助
http://tiannanyi.blog.163.com/blog/static/187359344201348944724/

#8


把4个顶点储存到一个数组里,比如说是m_Vertex[4]里,然后用dc.Polygon(m_Vertex,5),再用CBrush填充就好了。
CBrush brush(RGB(0,255,0)),*pOldBrush;//(线型,线粗,线色)
CClientDC dc(this);                        //创建一个DC
pOldBrush=dc.SelectObject(&brush);
dc.Polygon(m_Vertex,5);//总共是index+1个点

#1


D2D的话用个旋转矩阵就行了 MFC中如何给倾斜矩形填充颜色,GDI的话估计只能自己算了

#2


用连通区域RGN定义矩形区域,然后填充颜色。

#3


“plgblt.zip”
http://download.csdn.net/detail/schlafenhamster/3343102
“微软的例子,用vc60编译,说明plgblt的使用方法”

#4


在mfc里边可以用gdi 或者 gdi+的drawpath
思路是把你旋转以后的矩形4个点求出来转成路径然后画。

这个方法可以来画任意不规则形状

#5


FloodFill
The FloodFill function fills an area of the display surface with the current brush. The area is assumed to be bounded as specified by the crFill parameter. 

Note  The FloodFill function is included only for compatibility with 16-bit versions of Windows. For Win32-based applications, use the ExtFloodFill function with FLOODFILLBORDER specified. 

BOOL FloodFill(
  HDC hdc,          // handle to device context
  int nXStart,      // x-coordinate, where fill begins
  int nYStart,      // y-coordinate, where fill begins
  COLORREF crFill   // fill color
);
 
Parameters
hdc 
Handle to a device context. 
nXStart 
Specifies the logical x-coordinate of the point where filling is to begin. 
nYStart 
Specifies the logical y-coordinate of the point where filling is to begin. 
crFill 
Specifies the color of the boundary or of the area to be filled. 
Return Values
If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. 

Windows NT: To get extended error information, callGetLastError. 

Remarks
Following are reasons this function might fail: 

The fill could not be completed. 
The given point has the boundary color specified by the crFill parameter. 
The given point lies outside the current clipping region — that is, it is not visible on the device. 
See Also
Bitmaps Overview, Bitmap Functions, ExtFloodFill 

 

#6


CDC::FloodFill  
BOOL FloodFill( int x, int y, COLORREF crColor );

Return Value

Nonzero if the function is successful; otherwise 0 is returned if the filling could not be completed, the given point has the boundary color specified by crColor, or the point is outside the clipping region.

Parameters

x

Specifies the logical x-coordinate of the point where filling begins.

y

Specifies the logical y-coordinate of the point where filling begins.

crColor

Specifies the color of the boundary.

Remarks

Fills an area of the display surface with the current brush. The area is assumed to be bounded as specified by crColor. The FloodFill function begins at the point specified by x and y and continues in all directions to the color boundary. 

Only memory-device contexts and devices that support raster-display technology support the FloodFill member function. For information about RC_BITBLT capability, see the GetDeviceCaps member function. 

The ExtFloodFill function provides similar capability but greater flexibility.

CDC Overview |  Class Members |  Hierarchy Chart

See Also   CDC::ExtFloodFill, CDC::GetDeviceCaps,::FloodFill 

#7


看看这篇文章会不会对你有帮助
http://tiannanyi.blog.163.com/blog/static/187359344201348944724/

#8


把4个顶点储存到一个数组里,比如说是m_Vertex[4]里,然后用dc.Polygon(m_Vertex,5),再用CBrush填充就好了。
CBrush brush(RGB(0,255,0)),*pOldBrush;//(线型,线粗,线色)
CClientDC dc(this);                        //创建一个DC
pOldBrush=dc.SelectObject(&brush);
dc.Polygon(m_Vertex,5);//总共是index+1个点