关于OnDraw(CDC *pDC) 但用的是CDC::BitBlt(..),有问题嘛?还是要用BitBlt(..) API 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想OnDraw里面有一些资源没有释放,如Pen,Brush,Bitmap等,需要用Object.DeleteObject()释放 int i,j; CDC dc; Position *Currentpos; dc.CreateCompatibleDC(pDC); for(i=0;i<MaxCol;i++) for(j=0;j<MaxRow;j++) { if(flag[i][j]==0) { dc.SelectObject(&Road); pDC->BitBlt(StartX+i*Size,StartY+j*Size, Size,Size,&dc,0,0,SRCINVERT); } else { dc.SelectObject(&Road2); pDC->BitBlt(StartX+i*Size,StartY+j*Size, Size,Size,&dc,0,0,SRCCOPY); } } dc.SelectObject(&Head); pDC->BitBlt(StartX+SnakeHead->col*Size,StartY+SnakeHead->row*Size, Size,Size,&dc,0,0,SRCCOPY); Currentpos=SnakeHead->next; dc.SelectObject(&Body); while(Currentpos) { if(Currentpos->col>=0&&Currentpos->col<MaxCol&&Currentpos->row>=0&&Currentpos->row<MaxRow) { pDC->BitBlt(StartX+Currentpos->col*Size,StartY+Currentpos->row*Size, Size,Size,&dc,0,0,SRCCOPY); Currentpos=Currentpos->next; } } dc.SelectObject(&OneHundred); for(i=0;i<MaxCol;i++) for(j=0;j<MaxRow;j++) if(flag[i][j]==1) pDC->BitBlt(StartX+i*Size,StartY+j*Size, Size,Size,&dc,0,0,SRCCOPY); dc.DeleteDC();Head等是CBitmap,全局变量 如果你需要系统为你重画某一块区域,其需要通过调用InvalidateRect函数,不然系统并不会调用OnDraw。我想问题应该是在这里 最好通过发消息的形式来重画...PostMessage(WM_PAINT....); 不要把处理过程放在OnDraw函数里,可以先计算好画在一个缓冲区了,然后再贴到屏幕上啊, 我非常赞同 Nownow(林子) 的想法如果图像很大,可以采样。 最好用BitBlt函数 可以创建一个CBitmap之类的成员变量,第一次把各个小位图组成一个大位图,存到CBitmap中。以后在ondraw中直接贴CBitmap。如果位图太大可以按照实际的屏幕点素数对位图进行采样。 CXImage缩放图片的实现 基于对话框程序的快捷键问题 在VC的 Date Time Picker 中 为什么我在 小时的那一栏中输入的时间不能大于12啊 关于LNK2019,请大家把把脉 (SDK) 如何实现透明控件?以及如何在控件中显示光标的问题 请问如何判断一个文件夹是否存在?怎么查找一个文件夹? 喝可乐,呵呵 清仓大甩卖!溢出的问题 两个局域网终端通过socket编程连接 如何实现 重叠I/O模型的 发送会影响 接收吗,何时发送??? 请教一个关于截取桌面并显示的问题,急! 关于PC的COM端口监听实时信号的小问题
CDC dc;
Position *Currentpos;
dc.CreateCompatibleDC(pDC); for(i=0;i<MaxCol;i++)
for(j=0;j<MaxRow;j++)
{
if(flag[i][j]==0)
{
dc.SelectObject(&Road);
pDC->BitBlt(StartX+i*Size,StartY+j*Size,
Size,Size,&dc,0,0,SRCINVERT);
}
else
{
dc.SelectObject(&Road2);
pDC->BitBlt(StartX+i*Size,StartY+j*Size,
Size,Size,&dc,0,0,SRCCOPY);
}
} dc.SelectObject(&Head);
pDC->BitBlt(StartX+SnakeHead->col*Size,StartY+SnakeHead->row*Size,
Size,Size,&dc,0,0,SRCCOPY);
Currentpos=SnakeHead->next; dc.SelectObject(&Body);
while(Currentpos)
{
if(Currentpos->col>=0&&Currentpos->col<MaxCol&&Currentpos->row>=0&&Currentpos->row<MaxRow)
{
pDC->BitBlt(StartX+Currentpos->col*Size,StartY+Currentpos->row*Size,
Size,Size,&dc,0,0,SRCCOPY);
Currentpos=Currentpos->next;
}
} dc.SelectObject(&OneHundred);
for(i=0;i<MaxCol;i++)
for(j=0;j<MaxRow;j++)
if(flag[i][j]==1)
pDC->BitBlt(StartX+i*Size,StartY+j*Size,
Size,Size,&dc,0,0,SRCCOPY); dc.DeleteDC();Head等是CBitmap,全局变量
PostMessage(WM_PAINT....);
再贴到屏幕上啊,
如果图像很大,可以采样。
如果位图太大可以按照实际的屏幕点素数对位图进行采样。