VC 用GDI函数画椭圆和矩形的问题,请高手帮忙
我想要实现的想法是这样:可以通过点选菜单中的"Rect""Ellipse""line""freeline"像PS中的画图工具那样分别画出矩形,椭圆,直线,和随鼠标自由线现...
我想要实现的想法是这样:
可以通过点选菜单中的"Rect" "Ellipse" "line" "freeline"
像PS中的画图工具那样分别画出矩形,椭圆,直线,和随鼠标自由线
现在功能虽然实现,但是出现一个问题,矩形和圆形都是实心反色的,
我是想让他们只有边框,而且可以互相重叠 而且上图不覆盖下图
(也就是像奥运五环那样的,相互叠在一块但中间是透明的)
我个人感觉可能是SetROP2这个函数没有用对的关系,下面我把源码放上来
请高手指正一下,解决后我会加分的
另外工程文件我也打包上传了纳米盘,也可以直接下载下来改动!
地址:http://www.namipan.com/d/code.rar/c18da366fb482a97bb65e2f69312dde3c1edb6445f0e0000
画椭圆和矩形实现代码部分:
if(drawcontrol==1)//rect
{
SetROP2(hdc,R2_XORPEN);
MoveToEx(hdc,x1,y1,NULL);
Rectangle(hdc,x1,y1,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
Rectangle(hdc,x1,y1,x2,y2);
SetROP2(hdc,R2_NOT);
}
else if(drawcontrol==2)//ellipse
{
SetROP2(hdc,R2_XORPEN);
MoveToEx(hdc,x1,y1,NULL);
Ellipse(hdc,x1,y1,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
Ellipse(hdc,x1,y1,x2,y2);
} 展开
可以通过点选菜单中的"Rect" "Ellipse" "line" "freeline"
像PS中的画图工具那样分别画出矩形,椭圆,直线,和随鼠标自由线
现在功能虽然实现,但是出现一个问题,矩形和圆形都是实心反色的,
我是想让他们只有边框,而且可以互相重叠 而且上图不覆盖下图
(也就是像奥运五环那样的,相互叠在一块但中间是透明的)
我个人感觉可能是SetROP2这个函数没有用对的关系,下面我把源码放上来
请高手指正一下,解决后我会加分的
另外工程文件我也打包上传了纳米盘,也可以直接下载下来改动!
地址:http://www.namipan.com/d/code.rar/c18da366fb482a97bb65e2f69312dde3c1edb6445f0e0000
画椭圆和矩形实现代码部分:
if(drawcontrol==1)//rect
{
SetROP2(hdc,R2_XORPEN);
MoveToEx(hdc,x1,y1,NULL);
Rectangle(hdc,x1,y1,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
Rectangle(hdc,x1,y1,x2,y2);
SetROP2(hdc,R2_NOT);
}
else if(drawcontrol==2)//ellipse
{
SetROP2(hdc,R2_XORPEN);
MoveToEx(hdc,x1,y1,NULL);
Ellipse(hdc,x1,y1,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
Ellipse(hdc,x1,y1,x2,y2);
} 展开
1个回答
展开全部
要绘空心的图形 请事先将空刷子选入设备
相关部分改了一下
case WM_MOUSEMOVE:
hdc=GetDC(hWnd);
SelectObject(hdc, GetStockObject(NULL_BRUSH));
SetROP2(hdc,R2_NOT);
if(bDraw==TRUE)
{
if(drawcontrol==1)//rect
{
//SetROP2(hdc,R2_XORPEN);
MoveToEx(hdc,x1,y1,NULL);
Rectangle(hdc,x1,y1,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
Rectangle(hdc,x1,y1,x2,y2);
SetROP2(hdc,R2_NOT);
}
else if(drawcontrol==2)//ellipse
{
//SetROP2(hdc,R2_XORPEN);
MoveToEx(hdc,x1,y1,NULL);
Ellipse(hdc,x1,y1,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
Ellipse(hdc,x1,y1,x2,y2);
}
else if(drawcontrol==3)//freeline
{
MoveToEx(hdc,x1,y1,NULL);
x1=LOWORD(lParam);
y1=HIWORD(lParam);
LineTo(hdc,x1,y1);
ReleaseDC(hWnd,hdc);
}
else if(drawcontrol==4)//line
{
MoveToEx(hdc,x1,y1,NULL);
LineTo(hdc,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
LineTo(hdc,x2,y2);
}
// "if ..." end here
}
ReleaseDC(hWnd,hdc);
return 0;
相关部分改了一下
case WM_MOUSEMOVE:
hdc=GetDC(hWnd);
SelectObject(hdc, GetStockObject(NULL_BRUSH));
SetROP2(hdc,R2_NOT);
if(bDraw==TRUE)
{
if(drawcontrol==1)//rect
{
//SetROP2(hdc,R2_XORPEN);
MoveToEx(hdc,x1,y1,NULL);
Rectangle(hdc,x1,y1,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
Rectangle(hdc,x1,y1,x2,y2);
SetROP2(hdc,R2_NOT);
}
else if(drawcontrol==2)//ellipse
{
//SetROP2(hdc,R2_XORPEN);
MoveToEx(hdc,x1,y1,NULL);
Ellipse(hdc,x1,y1,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
Ellipse(hdc,x1,y1,x2,y2);
}
else if(drawcontrol==3)//freeline
{
MoveToEx(hdc,x1,y1,NULL);
x1=LOWORD(lParam);
y1=HIWORD(lParam);
LineTo(hdc,x1,y1);
ReleaseDC(hWnd,hdc);
}
else if(drawcontrol==4)//line
{
MoveToEx(hdc,x1,y1,NULL);
LineTo(hdc,x2,y2);
x2=LOWORD(lParam);
y2=HIWORD(lParam);
MoveToEx(hdc,x1,y1,NULL);
LineTo(hdc,x2,y2);
}
// "if ..." end here
}
ReleaseDC(hWnd,hdc);
return 0;
东莞大凡
2024-08-07 广告
2024-08-07 广告
在东莞市大凡光学科技有限公司,我们利用Halcon软件处理机器视觉项目时,会用到自定义标定板以满足特定需求。Halcon支持用户根据实际应用场景自定义标定板形状与标记点。这不仅可以灵活应对不同工作环境,还能提高标定精度。通过调整圆点数量、间...
点击进入详情页
本回答由东莞大凡提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询