对话框里面的刷新onpaint(),对话框显示后,再刷新一两次,就有CreatePolygonRgn失败了,帮忙看一下这段代码的问题在哪?
CPaintDC dc(this);
CPoint* p=new CPoint[7];
p[1].x =1;
p[1].y =7; p[2].x =55;
p[2].y= 21;
p[3].x =12;
p[3].y =37;
p[4].x =21;
p[4].y =76;
p[5].x =61;
p[5].y =75;
p[6].x =21;
p[6].y =72;
p[0] = p[6];
CPen pen(1,1,RGB(255,0,0));
CPen* pOldPen;
pOldPen=dc.SelectObject(&pen);
dc.SetBkMode(TRANSPARENT);
for(int i=0 ; i<1000 ; i++)
{
dc.TextOut(20,20,"dddd da",9);
CRgn* rgn=new CRgn;
if(rgn->CreatePolygonRgn(p,11,ALTERNATE)==0)
{
CString s;
s.Format("%d error",i);
AfxMessageBox(s);
}
CBrush b(RGB(0,220,0));
if(dc.FillRgn(rgn,&b)==0)
AfxMessageBox("fill error");
rgn->DeleteObject();
delete rgn;
}
dc.SelectObject(pOldPen);
delete []p;
CDialog::OnPaint();
CPaintDC dc(this);
CPoint* p=new CPoint[7];
p[1].x =1;
p[1].y =7; p[2].x =55;
p[2].y= 21;
p[3].x =12;
p[3].y =37;
p[4].x =21;
p[4].y =76;
p[5].x =61;
p[5].y =75;
p[6].x =21;
p[6].y =72;
p[0] = p[6];
CPen pen(1,1,RGB(255,0,0));
CPen* pOldPen;
pOldPen=dc.SelectObject(&pen);
dc.SetBkMode(TRANSPARENT);
for(int i=0 ; i<1000 ; i++)
{
dc.TextOut(20,20,"dddd da",9);
CRgn* rgn=new CRgn;
if(rgn->CreatePolygonRgn(p,11,ALTERNATE)==0)
{
CString s;
s.Format("%d error",i);
AfxMessageBox(s);
}
CBrush b(RGB(0,220,0));
if(dc.FillRgn(rgn,&b)==0)
AfxMessageBox("fill error");
rgn->DeleteObject();
delete rgn;
}
dc.SelectObject(pOldPen);
delete []p;
CDialog::OnPaint();
解决方案 »
- 分块导入1.2G图像时GlobalAlloc()出错
- 我是菜鸟,一个非常简单的问题.help!!!
- 关于FILE文件指针的问题!
- 请教那个函数可以把一个字符串转换成GBK编码的,例如
- format('%20s',[str])时,如何使字符串居中?
- 请问使用HidD_GetHidGuid函数(从操作系统获取HIDs )应包含哪一个头文件和库文件?
- 请问谁有VC通过ADO对SQLSERVER搞作的例子?`
- 关于网络监视器捕获ICMP包的问题
- 如何用VC生成Excel表阿 ?
- 我想去印度!
- 获取HDIB每个像素的RGB值
- 在Win32应用程序中显示调用dll成功,同样的代码和dll在DLL中调用失败
CPaintDC dc(this);
CPoint* p=new CPoint[7];
p[1].x =1;
p[1].y =7; p[2].x =55;
p[2].y= 21;
p[3].x =12;
p[3].y =37;
p[4].x =21;
p[4].y =76;
p[5].x =61;
p[5].y =75;
p[6].x =21;
p[6].y =72;
p[0] = p[6];
CPen pen(1,1,RGB(255,0,0));
CPen* pOldPen;
pOldPen=dc.SelectObject(&pen);
dc.SetBkMode(TRANSPARENT);
for(int i=0 ; i <1000 ; i++)
{
dc.TextOut(20,20,"dddd da",9);
CRgn* rgn=new CRgn;
if(rgn->CreatePolygonRgn(p,11,ALTERNATE)==0)
{
CString s;
s.Format("%d error",i);
AfxMessageBox(s);
}
CBrush b(RGB(0,220,0));
if(dc.FillRgn(rgn,&b)==0)
AfxMessageBox("fill error");
rgn->DeleteObject();
delete rgn;
}
dc.SelectObject(pOldPen);
delete []p; CDialog::OnPaint();
应该是7个点吧!你用了11个点,估计会错了!
delete rgn; 后面加b.DeleteObject();
另外,dc.SetBkMode(TRANSPARENT); 应该记录以前的mode,然后用完设置回去!