VC 用GDI函数画椭圆和矩形的问题,请高手帮忙

来源:百度知道 编辑:UC知道 时间:2024/07/08 01:12:59
我想要实现的想法是这样:

可以通过点选菜单中的"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);
}

要绘空心的图形 请事先将空刷子选入设备

相关部分改了一下

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
{