MFC中关于CDC和FillRgn();

如下程序:cd.FillRgn(&rg2,&br); 如果用这一句就会出错,为什么;

else
{
CDC *p=this->GetDC();

CDC cd;
CRgn rg1,rg2,rg;
CBrush br;
br.CreateSolidBrush(RGB(255,0,0));
rg1.CreateRectRgn(10,10,100,100);
rg2.CreateEllipticRgn(10,10,200,200);
rg2.CombineRgn(&rg1,&rg2,RGN_XOR);
//cd.FillRgn(&rg2,&br); 这里如果用对象引用FillRgn()会出错,为什么;
p->FillRgn(&rg2,&br);
CDialogEx::OnPaint();
}

不是因为你使用对象(而不是指针)的原因出错。
而是因为,你的cd根本没有创建,只是声明了,没有产生实际的设备关联DC,这时候在cd上的物理操作都会报错。
你在使用之前,用任何一种方法创建或者获取了dc,都可以,比如:
cd.CreateCompatiableDC(p);
温馨提示:内容为网友见解,仅供参考
无其他回答

MFC中有没有绘垂直文字的函数?
DeleteDC 删除CDC对象对应的Windows设备上下文 FromHandle 给定设备上下文句柄时,返回指向CDC对象的指针。如果CDC对象未附加到句柄,则创建并附加一个临时CDC对象 DeleteTempMap 由CWinApp空闲时间句柄调用,删除FromHandle创建的临时CDC对象。同时分离设备上下文 Attach 把Windows设备上下文附加到这个CDC对象 Detach 从CDC对象分离Wi...

MFC怎么给由线连成的图形填充颜色
如果是规则图形,可以使用对应的规则填充函数,MoveTo LineTo的线段组合本身无法填充。vc下可以使用CDC类的FillRgn函数进行不规则封闭图形的填充,之前你需要创建一个CRgn类的封闭图形。大致代码如下:pDC->BeginPath();pDC->MoveTo(p0);pDC->LineTo(p1);pDC->LineTo(p2);pDC->LineTo(p0);pDC->Cl...

成员函数CDC类成员
CDC类是Windows图形设备接口(GDI)中的一个核心组件,它代表一个设备上下文,用于图形和文本的输出。主要包含以下成员:数据成员: m_hDC 用于输出的设备上下文,m_hAttribDC 用于输出属性的设备上下文。构造函数: CDC类通过构造函数创建一个设备上下文对象。初始化: CreateDC 和 CreateIC 分别用于为指定设...

说明CDC类中,常用的一些成员函数。
CDC包含m_hDC和m_hAttribDC两个设备上下文,它们在CDC对象创建时参考同一个设备。CDC指导所有对m_hDC的输出GDI调用以及对m_hAttribDC的大部分属性GDI调用(GetTextColor是属性调用的例子,而SetTextColor是一个输出调用)。例如框架使用这两个设备上下文实现CMetaFileDC对象,在从物理设备读取属性期间向元文件发送输出。打印...

相似回答