内存CDC?

suxk 2003-05-29 04:48:12
CNetwDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect;
CDC memDc;
memDc.CreateCompatibleDC(pDC);
/* CBrush cBrush;
cBrush.CreateSolidBrush(RGB(128,128,0));
GetClientRect(&rect);
// TODO: Add your message handler code here
pDC->SelectObject (&cBrush);
pDC->DrawFocusRect (&rect);
pDC->FillRect (rect,&cBrush);*/

//画电脑
for(int i=1;i<=m_computer.GetSize();i++)
{
memDc.DrawIcon (m_computer.GetComputer(i)->m_position ,AfxGetApp()->LoadIcon (IDI_COMPUTER));
if(m_computer.GetComputer(i)->m_netCard !=NULL)

memDc.DrawIcon (m_computer.GetComputer(i)->m_netCard->m_position ,AfxGetApp()->LoadIcon (IDI_NETCARD1));
}
//画水晶头
connp *current;
current=m_connectLink.m_head ;
while(current)
{
memDc.DrawIcon (current->m_connect .m_position ,AfxGetApp()->LoadIcon (IDI_CONNECT));
current=current->m_next ;
}
int x=m_change.GetSize ();
while(x!=0)
{
x--;
m_change[x].OnDraw(&memDc);
}
for(x=0;x<m_router.GetSize();x++)
m_router[x].OnDraw(&memDc);

// 设置画笔
CPen *oldpen;
CPen *newPen;
oldpen=new CPen;

oldpen->CreatePen (PS_SOLID, 2,RGB(128,128,128));
newPen=memDc.SelectObject(oldpen);
//直线组
m_LineArray.OnDraw (&memDc);
m_netLine->OnDraw (&memDc);
memDc.SelectObject (newPen);
delete(oldpen);
if(m_isPlay)
{
int x=m_witchLine-1;
if(m_PlayRecord[x].m_isOutTime )
{
KillTimer(WM_PLAY1+x);
return;
}
CLineRecord linerecord;
CPlayReturn cPlayReturn;
linerecord=m_PlayRecord[x].m_line;
//假如是头或尾
if(linerecord.m_beginORend==begin)
cPlayReturn=m_LineArray.FandLine(linerecord.m_witchGroup)->
CPlay(&memDc,1);
else
cPlayReturn=m_LineArray.FandLine(linerecord.m_witchGroup)->
CPlay(&memDc,2);
m_PlayRecord[x].m_position=cPlayReturn.m_currentPoint;
if(cPlayReturn.m_playOver)
{
KillTimer(WM_PLAY1+m_witchLine);
m_isPlay=false;
m_PlayRecord[x].m_isOutTime=true;
if(!IsComputer(m_PlayRecord[x]))
if(!IsChange(m_PlayRecord[x]))
IsRouter(m_PlayRecord[x]);
SendMessage(WM_ISTHELINEEND,0,linerecord.m_witchGroup );
}
}
memDc.BitBlt(0,0,1000,1000,pDC,0,0,SRCCOPY);
memDc.DeleteDC();

怎么不能显示东西
...全文
56 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
suxk 2003-05-30
  • 打赏
  • 举报
回复
各位我终于知道了,我没有创建设备.谢谢!!!
suxk 2003-05-29
  • 打赏
  • 举报
回复
即使改成pDC.Bitblt(0,0,1000,1000,memDC,0,0,SRCCOPY);也不行!后来我用下列代码成功了:
GetClientRect(rect);
pDC->SelectObject(cbrush);
cbitMap.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());

CDC memDc;
memDc.CreateCompatibleDC(pDC);
memDc.SelectObject(cbitMap);
memDc.Rectangle(rect);
cbrush.DeleteObject();
为什么一定要在,新建的一个位图上做才行?
ifromheaven 2003-05-29
  • 打赏
  • 举报
回复
呵呵,大青蛙说的对,加上这一句pDC.Bitblt(0,0,1000,1000,memDC,0,0,SRCCOPY);
dz_w 2003-05-29
  • 打赏
  • 举报
回复
请注意,你的方向有错误,
用pDC建立memDc后,在Bitblt前,所有操作应在memDc上进行,最后再pDC->Bitblt(0,0,1000,1000,memDC,0,0,SRCCOPY);
winthegame 2003-05-29
  • 打赏
  • 举报
回复
你画得那么起劲,最后一句
memDc.BitBlt(0,0,1000,1000,pDC,0,0,SRCCOPY);
把屏幕上的东西又画到内存里,然后把内存 删除了啥意思啊??

存心折腾电脑啊?!偶仅代表电脑向你提出强烈抗议!

建议换成这句:pDC.Bitblt(0,0,1000,1000,memDC,0,0,SRCCOPY);

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧