下面的代码在OnDraw时间里,OnTimer控制m_nPostion变量。
结果是一个时刻只能有一条直线,OnTimer每Invalidate一次。原来的直线没了。
怎么在内存绘图,OnTimer显示,保证原来的图像还有呢?
void CDynViewView::OnDraw(CDC* pDC)
{
CDynViewDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CPen pen;
pen.CreatePen(PS_SOLID,2,RGB(255,0,0));
CPen *oldpen;
oldpen=pDC->SelectObject(&pen);
pDC->MoveTo(m_nPositon,100);
pDC->LineTo(m_nPositon,100-m_nPositon);
pDC->SelectObject(oldpen);
// TODO: add draw code for native data here
}
结果是一个时刻只能有一条直线,OnTimer每Invalidate一次。原来的直线没了。
怎么在内存绘图,OnTimer显示,保证原来的图像还有呢?
void CDynViewView::OnDraw(CDC* pDC)
{
CDynViewDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CPen pen;
pen.CreatePen(PS_SOLID,2,RGB(255,0,0));
CPen *oldpen;
oldpen=pDC->SelectObject(&pen);
pDC->MoveTo(m_nPositon,100);
pDC->LineTo(m_nPositon,100-m_nPositon);
pDC->SelectObject(oldpen);
// TODO: add draw code for native data here
}
解决方案 »
- mfc 多媒体定时器的使用问题
- 请问我这个程序哪里出问题了
- 老是说我数据库连接失败。。到底哪里错了!!!
- 跨进程事件通信失败,谁能提供一个测试代码?
- 初学者求救:XML在vc解析时遇到的问题【在线等】
- 我想请问一下,我该如何把ActiveMovieControl Object这个控件找出来
- 如何才能在win2000和xp系统中对io port进行操作?
- 进程PID与可执行程序
- while(cin>>word)出错,邦忙看看,谢谢。
- 请高手们来看看
- 请问怎样取得其他进程中CListCtrl中的每一行数据,我这边总是报告:内存地址无法writen?
- 关于sockaddr和sockaddr_in结构,急~
dcMem.CreateCompatibleDC(pDC);
CBitmap bmp;
CRect rc;
GetWindowRect(&rc); bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
dcMem.SelectObject(bmp);
; CPen pen;
pen.CreatePen(PS_SOLID,2,RGB(255,0,0));
CPen *oldpen;
oldpen=dcMem->SelectObject(&pen);
dcMem->MoveTo(m_nPositon,100);
dcMem->LineTo(m_nPositon,100-m_nPositon);
dcMem->SelectObject(oldpen);
pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);
变量的值,同时绘制内存块。再在OnDraw里面把
内存copy一份出来,应该不用自定义的数据结构才是啊
dcMem.CreateCompatibleDC(pDC);
CBitmap bmp;
CRect rc;
GetWindowRect(&rc); bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
dcMem.SelectObject(bmp);
; CPen pen;
pen.CreatePen(PS_SOLID,2,RGB(255,0,0));
CPen *oldpen;
oldpen=dcMem.SelectObject(&pen);
dcMem.MoveTo(m_nPositon,100);
dcMem.LineTo(m_nPositon,100-m_nPositon);
dcMem.SelectObject(oldpen);
pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCCOPY);
======================================================================
默认是黑色的,插入句:
CBrush brush(RGB(xx,xx,xx));//颜色自己喜欢
dcMem.FillRect(&rc,&brush);
bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
dcMem.SelectObject(bmp);
所以要创建兼容位图并选入内存DC..
void CxxxView::ChuShiHua()
{
CDC *pDC = GetDC();
dcMem.CreateCompatibleDC(pDC);
CRect rc;
GetClientRect(&rc);bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
pOldBitmap = dcMem.SelectObject(&bmp);
CBrush brush(RGB(xx,xx,xx));//颜色自己喜欢
dcMem.FillRect(&rc,&brush); //刷..
ReleaseDC(pDC);}
然后可以在OnDraw或OnPaint里用dcMem绘图了..
最后记得析构
dcMem.SelectObject(pOldBitmap);
dcMem.DeleteDC();
bmp.DeleteObject();