我编了一个小程序,
在一个线程中调用:
g_pMainView->Invalidate(FALSE);
///////////////////////////////////////////////////////////////////
// 其中,在CMyproView::Create()中,定义g_pMainView = this;
///////////////////////////////////////////////////////////////////然后在CMyproView::OnPaint()中进行画图语句。
具体代码为
CMyproView::OnPaint()
{
CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here
CCPADDoc* pDoc = GetDocument();
// TODO: add draw code here ASSERT_VALID(pDoc);
CRect rect;
CDC * pDC=GetDC();
pDC->GetClipBox(&rect); CBrush brush(RGB(0,0,255));
CBrush * pOldBrush= pDC->SelectObject(&brush); pDC->PatBlt(rect.left,rect.top, //清除显示区
rect.Width(),rect.Height(),
PATCOPY);
pDC->SelectObject(pOldBrush);
CPen Pen;
CPen* OldPen;
GetClientRect(&rect);
int doti,dotj; //显示网格
Pen.CreatePen(PS_SOLID,1,RGB(170,170,255));
OldPen=pDC->SelectObject(&Pen);
for(dotj=0;dotj<8;dotj++) {
pDC->MoveTo(0,dotj*rect.Height()/8);
pDC->LineTo(1024,dotj*rect.Height()/8);
}
for(doti=0;doti<10;doti++) {
pDC->MoveTo(doti*rect.Width()/10,0);
pDC->LineTo(doti*rect.Width()/10,768);
}
dc.SelectObject(OldPen);
Pen.DeleteObject();
Pen.CreatePen(PS_SOLID,1,TIME_DATA_COLOR);
OldPen=dc.SelectObject(&Pen); int i,y;
int high,width,x;
high=rect.Height();
width=rect.Width();
dc.MoveTo(0,high);
int fnumber;
fnumber=1024;
for(i=1; i<fnumber;i+=1) { //显示波形
x=i;
if(x>width) break;
y=xxxx;
dc.LineTo(x,y);
}
dc.SelectObject(OldPen);// 恢复原笔
Pen.DeleteObject();
}
但是,在Win98下,通过查看系统资源,发现GUI在不断的减少,
当我将线程中的g_pMainView->Invalidate(FALSE);去掉,则GUI资源不会减少,这说明问题出在CMyproView::OnPaint()中。
哪位高手可以指点一下,谢谢!!!
在一个线程中调用:
g_pMainView->Invalidate(FALSE);
///////////////////////////////////////////////////////////////////
// 其中,在CMyproView::Create()中,定义g_pMainView = this;
///////////////////////////////////////////////////////////////////然后在CMyproView::OnPaint()中进行画图语句。
具体代码为
CMyproView::OnPaint()
{
CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here
CCPADDoc* pDoc = GetDocument();
// TODO: add draw code here ASSERT_VALID(pDoc);
CRect rect;
CDC * pDC=GetDC();
pDC->GetClipBox(&rect); CBrush brush(RGB(0,0,255));
CBrush * pOldBrush= pDC->SelectObject(&brush); pDC->PatBlt(rect.left,rect.top, //清除显示区
rect.Width(),rect.Height(),
PATCOPY);
pDC->SelectObject(pOldBrush);
CPen Pen;
CPen* OldPen;
GetClientRect(&rect);
int doti,dotj; //显示网格
Pen.CreatePen(PS_SOLID,1,RGB(170,170,255));
OldPen=pDC->SelectObject(&Pen);
for(dotj=0;dotj<8;dotj++) {
pDC->MoveTo(0,dotj*rect.Height()/8);
pDC->LineTo(1024,dotj*rect.Height()/8);
}
for(doti=0;doti<10;doti++) {
pDC->MoveTo(doti*rect.Width()/10,0);
pDC->LineTo(doti*rect.Width()/10,768);
}
dc.SelectObject(OldPen);
Pen.DeleteObject();
Pen.CreatePen(PS_SOLID,1,TIME_DATA_COLOR);
OldPen=dc.SelectObject(&Pen); int i,y;
int high,width,x;
high=rect.Height();
width=rect.Width();
dc.MoveTo(0,high);
int fnumber;
fnumber=1024;
for(i=1; i<fnumber;i+=1) { //显示波形
x=i;
if(x>width) break;
y=xxxx;
dc.LineTo(x,y);
}
dc.SelectObject(OldPen);// 恢复原笔
Pen.DeleteObject();
}
但是,在Win98下,通过查看系统资源,发现GUI在不断的减少,
当我将线程中的g_pMainView->Invalidate(FALSE);去掉,则GUI资源不会减少,这说明问题出在CMyproView::OnPaint()中。
哪位高手可以指点一下,谢谢!!!
解决方案 »
- VC++下载地址,想要吗?要的话就来……
- ODBC连接数据库 用list control 怎么读取数据库里的内容啊
- ado中分页功能是不是摆来看的
- 如何实现通过服务器,让两个客户端互相通信!
- 公司的电脑连着局域网,原来的是WIN2000,我装了XP后不能上网,但是用查看局域网的工具查看,能看见其他电脑的共享情况.
- SendRequestEx求助
- VC+ADO连接Access问题,急,在线等待!
- 调用OutLook发送邮件: ShellExecute(m_hWnd, NULL,"[email protected]",NULL,NULL,NULL),但是我想要在打开OutLook时填写“主题”和“附件”该
- 怎么做一个“硬件程序员”???:)
- 我下载了一个sp5,但安装时他说,我的vs和操作系统语言不匹配,按不上怎么办,
- 问个基本问题
- 在什么地方可以下载VC开发工具呀
我通常是创建多个CPen而不是反复Delete , Create
CPen 对象在构析函数中会自动释放,不用调用DeleteObject
问题可能出在你对同一对象重复调用CreatePen和Delete上