GDIObjective C文本Visual Studio 6Visual C++ 7.0Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
区域的有用函数





3.00/5 (8投票s)
2003 年 3 月 12 日
1分钟阅读

51507

1499
用于平铺区域和拉伸区域的函数。
引言
当我为我的公司编写 SkinMagic Toolkit 软件时,我需要在一个限定矩形内平铺一个区域或拉伸一个区域。我将其实现为两个函数,CreateTileRegion
和 CreateStretchRegion
。
Using the Code
要使用这段代码,只需将 rgntool.cpp 和 rgntool.h 添加到您的项目中。调用 CreateTileRegion
或 CreateStretchRegion
来创建新的区域。运行演示项目时,请在窗口的客户端区域双击鼠标左键,以显示效果。
HRGN CreateStretchRgn( HRGN hSrcRgn, //the source region handle
float xScale , //x-axis scale
float yScale , //y-axis scale
int xOffset , //x-axis offset
int yOffset ) //y-axis offset
{
XFORM xForm;
xForm.eDx = 0;
xForm.eDy = 0;
xForm.eM11 = xScale;
xForm.eM12 = 0;
xForm.eM21 = 0;
xForm.eM22 = yScale;
HRGN hRgn = NULL ;
DWORD dwCount = GetRegionData( hSrcRgn , 0 , NULL );
BYTE* pRgnData =(BYTE*) malloc( dwCount );
if( pRgnData )
{
dwCount = GetRegionData( hSrcRgn , dwCount , (RGNDATA*)pRgnData );
hRgn = ExtCreateRegion( &xForm , dwCount , (RGNDATA*)pRgnData );
free( pRgnData );
if( hRgn )
{
OffsetRgn( hRgn , xOffset, yOffset );
return hRgn;
}
}
return NULL;
}
HRGN CreateTitleRgn( HRGN hSrcRgn, //the source region handle
SIZE szSize , //the source region rect size
RECT rcBound ) //the bound rectangle
{
HRGN hRgn = CreateRectRgn( 0,0,10,10 );
HRGN hTempRgn1 = CreateRectRgn( 0,0,10,10 );
HRGN hTempRgn2 =CreateRectRgn( 0,0,10,10 );
CombineRgn( hTempRgn2 , hSrcRgn , hTempRgn1 , RGN_COPY );
CombineRgn( hRgn , hSrcRgn , hTempRgn1 , RGN_COPY );
OffsetRgn( hRgn , rcBound.left , rcBound.top );
int xOffset=0 , yOffset=0;
for (yOffset = rcBound.top ; yOffset < rcBound.bottom ; yOffset += szSize.cy)
{
for (xOffset=rcBound.left ; xOffset < rcBound.right ; xOffset += szSize.cx)
{
CombineRgn( hTempRgn1 , hTempRgn2 , hSrcRgn , RGN_COPY );
OffsetRgn( hTempRgn1 , xOffset , yOffset );
CombineRgn( hRgn , hRgn , hTempRgn1 , RGN_OR );
}
}
DeleteObject( hTempRgn1 );
DeleteObject( hTempRgn2 );
hTempRgn1 = CreateRectRgnIndirect( &rcBound );
CombineRgn( hRgn , hRgn , hTempRgn1 , RGN_AND );
DeleteObject( hTempRgn1 );
return hRgn;
}
访问 这里 以获取我的其他 Win32 软件。
历史
- 2003-03-13:发布日期
Copyright
这段代码是免费的,如果您想修改源代码以改进功能、性能等,请将新的源代码发送给我,以便我查看。修改后的源代码应包含您所做的更改的描述,当然还有您的姓名。您唯一不能更改的是原始版权信息。
致谢
首先,感谢我的老板允许我在本网站上发布这段代码。
其次,感谢作者(很抱歉我没有记下他的/她的名字)编写了 CreateRgnFromBitmap
。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。