我这里有一个vc++程序,运行后有4个对话框界面,想要编程在其中一个界面显示一个圆圈。不调用画圆圈程序(PaintResult())时,4个对话框界面很正常。但是加入画圆圈程序(PaintResult())之后,程序开始正常显示,在指定界面指定位置显示一个圆圈。但运行几分钟后,在4个对话框界面和编程界面的另一个位置又显示另一个圆圈,有关程序如下:void CLongdistanceAdjustDlg1::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
CRect rect;
GetDlgItem(IDC_BUTTON_UPDORR)->GetWindowRect(&rect);
CFont m_Font;
m_Font.CreateFont( 18, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_MODERN, "arial" );
if(!m_input2)
{
PaintResult();
if(m_ReDraw)
{
Invalidate(false);
m_ReDraw=false;
}
}
CDialog::OnPaint();
}void CLongdistanceAdjustDlg1::PaintResult()
{
int x =15;
int y =43;
CClientDC cdc(this) ;
CDC*pDC=GetDC();
CBrush newBrush1(RGB(0,255,0));
CBrush *oldBrush;
oldBrush = cdc.SelectObject(&newBrush1);
cdc.SelectObject(&newBrush1);
cdc.Ellipse(x-RADIOUS-2,y-RADIOUS-2,x+RADIOUS+2,y+RADIOUS+2);
cdc.SelectObject(oldBrush);
newBrush1.DeleteObject();
this->ReleaseDC(pDC);
}
不知错误在那里?如何改正请高手们帮忙指点改程序。
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnPaint()
CRect rect;
GetDlgItem(IDC_BUTTON_UPDORR)->GetWindowRect(&rect);
CFont m_Font;
m_Font.CreateFont( 18, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_MODERN, "arial" );
if(!m_input2)
{
PaintResult();
if(m_ReDraw)
{
Invalidate(false);
m_ReDraw=false;
}
}
CDialog::OnPaint();
}void CLongdistanceAdjustDlg1::PaintResult()
{
int x =15;
int y =43;
CClientDC cdc(this) ;
CDC*pDC=GetDC();
CBrush newBrush1(RGB(0,255,0));
CBrush *oldBrush;
oldBrush = cdc.SelectObject(&newBrush1);
cdc.SelectObject(&newBrush1);
cdc.Ellipse(x-RADIOUS-2,y-RADIOUS-2,x+RADIOUS+2,y+RADIOUS+2);
cdc.SelectObject(oldBrush);
newBrush1.DeleteObject();
this->ReleaseDC(pDC);
}
不知错误在那里?如何改正请高手们帮忙指点改程序。
解决方案 »
- 请问项目完成后怎么才能在别人的电脑上用啊。。
- 我的双缓冲定时刷新1小时后让系统非常卡,是什么资源没释放吗,代码下面
- 如何将这一UNICODE字符串4f60597d转换回中文
- math.h里没有计算阶乘的函数?
- 在VC编程中如何给一个静态文本框加上水平和垂直滚动条?请大家帮帮我!
- 如何改变ListCtrl 里面items的颜色和字体的大小?
- 怪事,我给ASP写的组件执行时没有问题,关闭掉IE页面一会后,会出现DLLHOST.EXE: 0xC0000005:地址不能写
- PC下VC程序转WinCE问题集锦,请教各位高手,高分相送!
- 求个屏幕录像系统的源码~~哪位朋友有的帮忙发个~~小弟不胜感激啊。。。
- 求助各位大神~关于图像分割的区域生长算法的问题
- 关于用PV3D开发虚拟图书馆的问题?
- 怎么编写取代AVISaveOptions功能的函数
m_Font.CreateFont( 18, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0,
ANSI_CHARSET, OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_MODERN, "arial" ); 这个font用完后,要调用:m_Font.DeleteObject();
还有其它语句设置会影响显示驱动?
那为什么只不调用PaintResult() 语句程序显示就正常(长时间),其它有什么问题吗?谢谢!
oldBrush = cdc.SelectObject(&newBrush1);
cdc.SelectObject(&newBrush1);
调用了两次SelectObject,有点不合理,但是,也没有大错
唯一可能是CClientDC ,这个构造函数里面,也是GetDC();析构函数里面是ReleaseDC;所以,也不应该存在问题!
唯一的可能是,不调用PaintResult,没有画图,所以,即使GDI资源在不停的耗费,也不会有大的问题!当然,调用PaintResult,一旦没有资源了,你里面画图也就不对了!严重的时候,可能出现花屏等现象!