VC++实现不规则窗口说明
2008-04-24 00:59
375 查看
最近做一贴图程序,使用到一些API,因第一次弄,所以把它说明写出来,以备将来使用。CreateRectRgn原型:[b]BOOLCreateRectRgn(intx1,inty1,intx2,inty2);[/b]说明:创建一矩形区域存储在CRgn对象中x1指定区域左上角X坐标,y1指定区域左上角y坐标,x2指定区域右下角X坐标,y2指定区域右下角y坐标示例:CRgnrgn;BOOLbSucceeded=rgn.CreateRectRgn(50,20,150,120);CombineRgn
示例:CRgnrgnA,rgnB,rgnC;VERIFY(rgnA.CreateRectRgn(50,50,150,150));
VERIFY(rgnB.CreateRectRgn(100,100,200,200));
VERIFY(rgnC.CreateRectRgn(0,0,50,50));intnCombineResult=rgnC.CombineRgn(&rgnA,&rgnB,RGN_OR);GetPixel
说明:创建一个矩形区域
[/code]
[/code]
[/code]BitBlt
[/code]
[/code]
原型:intCombineRgn(CRgn*pRgn1,CRgn*pRgn2,intnCombineMode);
说明:将两个存在的区域合并成一个新的区域
pRgn1第一个存在区域的指针,pRgn2第二个存在区域的指针,nCombineMode合并模式(RGN_AND最后的区域是pRgn1和pRgn2的重叠部分;RGN_COPY最后的区域是pRgn1的拷贝;RGN_DIFF最后的区域是pRgn1中不包含pRgn2的部分;RGN_OR最后的区域同时包含pRgn1和pRgn2;RGN_XOR最后的区域同时包含pRgn1和pRgn2,但不包含pRng1和pRng2重叠的部分。)
示例:CRgnrgnA,rgnB,rgnC;VERIFY(rgnA.CreateRectRgn(50,50,150,150));
VERIFY(rgnB.CreateRectRgn(100,100,200,200));
VERIFY(rgnC.CreateRectRgn(0,0,50,50));intnCombineResult=rgnC.CombineRgn(&rgnA,&rgnB,RGN_OR);GetPixel
原型:COLORREFGetPixel(intx,inty)const;
说明:取得指定坐标点的RGB颜色值
x指定点的X坐标,y指定点的y坐标
示例:CPaintDCdc(this);
COLORREFcol=dc.GetPixel(1,1);
SetWindowRgn
原型:[b]intSetWindowRgn(HRGNhRgn,BOOLbRedraw=FALSE)throw();[/b]
说明:设置窗体形状
hRgn是一个CRgn类的句柄;bRedraw如果被设置成TRUE,那么,在窗口次序发生变化时,系统会发送WM_WINDOWPOSCHANGING和WM_WINDOWPOSCHANGED消息给窗口。 示例:CRgnrgn;
rgn.CreateRectRgn(0,0,100,100);
intiResult=SetWindowRgn(rgn,TRUE);
CreateRectRgnIndirect
原型:[b][b]BOOLCreateRectRgnIndirect(LPCRECTlpRect);[/b][/b]
lpRect指定所创建的矩形区域在窗口用户区中的left(左)、top(上)、right(右)、bottom(下)坐标。
示例:CRgnMyRgn; RECTm_rect; m_rect.left=0;m_rect.top=0;m_rect.right=500;m_rect.bottom=300; MyRgn.CreateRectRgnIndirect(&m_rect);
CreateEllipticRgnIndirect
原型:[b][b][b]BOOLCreateEllipticRgnIndirect(LPCRECTlpRect);[/b][/b][/b]
说明:创建一个椭圆形区域
lpRect指定所创建的椭圆形区域在窗口用户区中的left(左)、top(上)、right(右)、bottom(下)坐标,如果指定right坐标与left坐标之差等于bottom坐标与top坐标之差,则创建的区域是一个圆
示例:CRgnMyRgn; RECTm_rect; m_rect.left=0;m_rect.top=0;m_rect.right=500;m_rect.bottom=300; MyRgn.CreateEllitpticRgnIndirect(&m_rect);
CreatePolygonRgn
原型:[b][b][b][b]BOOLCreatePolygonRgn(LPPOINTlpPoints,intnCount,intnMode);[/b][/b][/b][/b]
说明:创建一个多边形区域
lpPoints指向一个POINT结构数组,在POINT结构数组中每个POINT结构项,用来确定多边形顶点在窗口用户区中的坐标;nCount说明POINT结构数组中POINT结构项的数目,也就是多边形的顶点数;nMode指定多边形的填充方式,一般使用ALTERNATE方式。
示例:CRgnMyRgn; POINTPoints[3]; Points[0].x=Points[0].y=0;Points[1].x=10;Points[1].y=30;Points[2].x=5;Points[2].y=60; MyRgn.CreatePolygonRgn(Points,3,ALTERNATE);
CreateCompatibleDC
原型:[b][b][b][b][b]BOOLCreateCompatibleDC(CDC*pDC);[/b][/b][/b][/b][/b]
说明:创建一个和pDC指定设备上下文一致的内存设备上下文
pDC一设备上下文指针,如果为NULL,这个函数创建一个和系统显示一致的内存设备上下文。
示例:CPaintDCdc(this);
CDCdcMemory; dcMemory.CreateCompatibleDC(&dc);
CreateCompatibleBitmap
原型:[b][b][b][b][b][b]BOOLCreateCompatibleBitmap(CDC*pDC,intnWidth,intnHeight);[/b][/b][/b][/b][/b][/b]
说明:创建一个和pDC指定设备一致的位图
pDC设备上下文指针,nWidth为位图的宽度,nHeight为位图的高度。
示例:HDChDC,//Handletothedisplaydevicecontext
hDCMem;//Handletothememorydevicecontext
HBITMAPhBitmap;//Handletothenewbitmap
intiWidth,iHeight;//Widthandheightofthebitmap
//Retrievethehandletoadisplaydevicecontextfortheclient
//areaofthewindow.
hDC=GetDC(hwnd);
//Createamemorydevicecontextcompatiblewiththedevice.
hDCMem=CreateCompatibleDC(hDC);
//Retrievethewidthandheightofwindowdisplayelements.
iWidth=GetSystemMetrics(SM_CXSCREEN)/10;
iHeight=GetSystemMetrics(SM_CYSCREEN)/10;
//Createabitmapcompatiblewiththedeviceassociatedwiththe
//devicecontext.
hBitmap=CreateCompatibleBitmap(hDC,iWidth,iHeight);
[/code]
[/code]
SelectObject
原型:CPen*SelectObject(CPen*pPen);
CBrush*SelectObject(CBrush*pBrush);
virtualCFont*SelectObject(CFont*pFont);
CBitmap*SelectObject(CBitmap*pBitmap);
intSelectObject(CRgn*pRgn);
CGdiObject*SelectObject(CGdiObject*pObject);
说明:选择一对象插入到设备上下文
pPeng一个CPen对象指针
pBrush一个CBrush对象指针
pFont一个CFont对象指针
pBitmap一个CBitmap对象指针
pRgn一个CRgn对象指针
pObject一个CGdiObject对象指针
示例:CClientDCdc(this);
CPenpenBlack;
penBlack.CreatePen(PS_SOLID,2,RGB(0,0,0));
CPen*pOldPen=dc.SelectObject(&penBlack);
CClientDCdc(this);
CBrushbrush1;
brush1.CreateSolidBrush(RGB(0,0,255));
CBrush*pTempBrush=(CBrush*)dc.SelectObject(&brush1);
CFontfont;
VERIFY(font.CreateFont(
12,//nHeight
0,//nWidth
0,//nEscapement
0,//nOrientation
FW_NORMAL,//nWeight
FALSE,//bItalic
FALSE,//bUnderline
0,//cStrikeOut
ANSI_CHARSET,//nCharSet
OUT_DEFAULT_PRECIS,//nOutPrecision
CLIP_DEFAULT_PRECIS,//nClipPrecision
DEFAULT_QUALITY,//nQuality
DEFAULT_PITCH|FF_SWISS,//nPitchAndFamily
"Arial"));//lpszFacename
CClientDCdc(this);
CFont*def_font=dc.SelectObject(&font);
CClientDCdc(this);
CBitmapbtScreen;
btScreen.CreateCompatibleBitmap(&dc,100,100);
CBitmap*newBmp=dc.SelectObject(&btScreen);
CClientDCdc(this);
CRgnrgn;
BOOLbSucceeded=rgn.CreateRectRgn(50,20,150,120);
intiResult=dc.SelectObject(&rgn);
[/code]BitBlt
原型:[b][b][b][b][b]BOOLBitBlt(intx,inty,intnWidth,intnHeight,CDC*pSrcDC,intxSrc,intySrc,DWORDdwRop);[/b][/b][/b][/b][/b]
说明:从源设备上下文复制位图到当前设备上下文
x目标区域的左上角x坐标,y目标区域的左上角y坐标,nWidth目标区域和位图的宽度,nHeight目标区域和位图的高度,pSrcDC将复制的位图所在的源设备上下文(如果dwRop指定不包含源,那么pSrcDC必须为NULL),xSrc源位图的左上角x坐标,ySrc源位图的左上角y坐标,dwRop指定光栅操作的执行方式。
示例:CClientDCdc(this);
CDCMemDC;
MemDC.CreateCompatibleDC(&dc);
dc.BitBlt(0,0,100,100,&MemDC,0,0,SRCCOPY);
[/code]
[/code]
相关文章推荐
- VC++实现不规则窗口说明
- vc 实现透明窗口和不规则窗口
- VC实现不规则窗口
- VC中实现不规则对话框(窗口)
- VC不规则窗口实现—位图区域裁剪
- 用VC++实现不规则窗口
- 用VC++实现不规则窗口
- VC实现区域选择以及不规则窗口示例
- 用VC++实现不规则窗口
- 用VC++实现不规则窗口
- VC 利用SetWindowRgn实现程序窗口的圆角多角矩形
- 虚函数的真相(VC编译器如何实现“virtual ”规则)
- VC实现对话框窗口任意分割
- VC:用AnimateWindow函数实现窗口动画效果
- 轻松实现类VC界面(窗口停靠)(转自heeeey)
- CRgn类和SetWindowRgn()函数实现不规则的窗口
- 在VC中隐藏控制台程序窗口的实现代码
- 用VC++实现异形窗口.
- VC实现对话框窗口任意分割
- VC++ 实现 窗口最小化 MFC