如何使用GDI绘制“回”形区域???? 本帖最后由 BoweirrKing 于 2013-03-02 17:46:49 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CXxxxDlg::OnPaint() { CPaintDC dc(this); CBrush xBrush; xBrush.CreateSolidBrush(RGB(250,230,200)); CRgn x1,x2; x1.CreateRectRgn(50,50,250,250); //外矩形区域 x2.CreateRectRgn(100,100,200,200); //内矩形区域 x1.CombineRgn(&x1,&x2,3); //用外区域减去内区域,得到回形区域 dc.FillRgn(&x1,&xBrush); //填充回形区域 x1.DeleteObject(); x2.DeleteObject(); xBrush.DeleteObject();} 也可以用不同大小的矩形填充比如,先FillRect黑色矩形,再算好坐标,在中间FillRect白色矩形(假设为背景色) 终于帮楼主搞定了 过程虽艰难 但也学到了很多东西求个一起学Windwos程序设计 C++的朋友一起写扫雷。不求精密算法 不参考成品源码 只求熟悉代码 用GDI跟MFC没关系 有没有一起学的同学? 有意的站内私信代码:RECT CreateRECT (INT left,INT top,INT Width,INT Height)//制矩形区域{ RECT rcA; rcA.left=left; rcA.top=top; rcA.right=rcA.left+Width; rcA.bottom=rcA.top+Height; return rcA;}VOID BitBitRgn (HDC hdc,RECT rect,INT RWidth,INT CWidth,HBITMAP hbmp)//以图片填充矩形区域到目标设备 (目标设备hdc,总体矩形区域,第一个向内扩展边宽度,第二个向内扩展边宽度,位图){ HRGN x1,x2; HBRUSH hBrush ; x1=CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom); x2=CreateRectRgn(rect.left+RWidth,rect.top+RWidth,rect.right-RWidth,rect.bottom-RWidth); CombineRgn(x1,x1,x2,RGN_XOR); x2=CreateRectRgn(rect.left+RWidth+CWidth,rect.top+RWidth+CWidth,rect.right-RWidth-CWidth,rect.bottom-RWidth-CWidth); CombineRgn(x1,x1,x2,RGN_XOR); SetBrushOrgEx(hdc,rect.left,rect.top,NULL);//必须设置刷子的新起点否则位图平铺整个客户区 hBrush=CreatePatternBrush(hbmp); FillRgn(hdc,x1,hBrush); DeleteObject(hBrush); DeleteObject(x1); DeleteObject(x2);}调用代码: BitBitRgn(hdcMem,CreateRECT(10,100,100,100),20,10,hBitmap3);运行效果: 关于树形控件修改某项文本? 对话框和控件 如何把tc代码转成vc? 谁有《Visual C++ +SQL Server 数据库应用系统开发与实例》的源代码阿?100分相送 问一个傻傻的问题:怎么在对话框中使用CScrollView ADO调SQL Server的问题 opengl中利用四叉树进行二维点的剖分?~急啊,大家帮帮我 WIN7中,软件参数保存到哪个文件夹呢? 如何响应点中checkbox的事件 请问哪位老兄有关于palm方面的资料,分大大的有......... 添加成员函数并调用 VC6用ADO能连接多张表吗
{
CPaintDC dc(this);
CBrush xBrush;
xBrush.CreateSolidBrush(RGB(250,230,200)); CRgn x1,x2;
x1.CreateRectRgn(50,50,250,250); //外矩形区域
x2.CreateRectRgn(100,100,200,200); //内矩形区域
x1.CombineRgn(&x1,&x2,3); //用外区域减去内区域,得到回形区域
dc.FillRgn(&x1,&xBrush); //填充回形区域 x1.DeleteObject();
x2.DeleteObject();
xBrush.DeleteObject();}
比如,先FillRect黑色矩形,再算好坐标,在中间FillRect白色矩形(假设为背景色)
不求精密算法 不参考成品源码 只求熟悉代码 用GDI跟MFC没关系 有没有一起学的同学? 有意的站内私信代码:
RECT CreateRECT (INT left,INT top,INT Width,INT Height)//制矩形区域
{
RECT rcA;
rcA.left=left;
rcA.top=top;
rcA.right=rcA.left+Width;
rcA.bottom=rcA.top+Height;
return rcA;
}VOID BitBitRgn (HDC hdc,RECT rect,INT RWidth,INT CWidth,HBITMAP hbmp)//以图片填充矩形区域到目标设备 (目标设备hdc,总体矩形区域,第一个向内扩展边宽度,第二个向内扩展边宽度,位图)
{
HRGN x1,x2;
HBRUSH hBrush ; x1=CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom);
x2=CreateRectRgn(rect.left+RWidth,rect.top+RWidth,rect.right-RWidth,rect.bottom-RWidth);
CombineRgn(x1,x1,x2,RGN_XOR);
x2=CreateRectRgn(rect.left+RWidth+CWidth,rect.top+RWidth+CWidth,rect.right-RWidth-CWidth,rect.bottom-RWidth-CWidth);
CombineRgn(x1,x1,x2,RGN_XOR); SetBrushOrgEx(hdc,rect.left,rect.top,NULL);//必须设置刷子的新起点否则位图平铺整个客户区
hBrush=CreatePatternBrush(hbmp);
FillRgn(hdc,x1,hBrush); DeleteObject(hBrush);
DeleteObject(x1);
DeleteObject(x2);
}
调用代码:
BitBitRgn(hdcMem,CreateRECT(10,100,100,100),20,10,hBitmap3);
运行效果: