C++MFC语句注释

voidCSnakeGame::OnPaint(){CPaintDCdc(this);//dc获得this所指向的地址CDCMemDC;//绘图类定义MemDC.Crea... void CSnakeGame::OnPaint()
{
CPaintDC dc( this );//dc获得this所指向的地址
CDC MemDC;//绘图类定义
MemDC.CreateCompatibleDC/*创建兼容设备*/( &dc );
// 装载背景
CBitmap bmp;//设备环境类
CPen pen;//画笔
bmp.LoadBitmap( IDB_BMP_BJ );//读取背景
pen.CreatePen( PS_SOLID, 1, 0xff );
MemDC.SelectObject( &bmp );//选择背景图
MemDC.SelectObject( &pen );//选择画笔
MemDC.SetROP2/*重新设定绘图的方式*/( R2_NOTXORPEN );//C++中一种绘画模式

CString ysStr; //定义字符串用于显示游戏时间得分等字
MemDC.SetBkMode(TRANSPARENT); //设置字体背景
MemDC.SetTextColor(67); //设置字体颜色
ysStr.Format("当前得分:%d",m_nScore); //初始化字符串
MemDC.TextOut(30,50,ysStr); //输出文本(当前得分)
switch(m_nlevel) //根据等级判断
{
case GAME_LEVEL_LOW: //如果是初级
ysStr.Format("当前等级:初级");//显示
break;
case GAME_LEVEL_NOR: //如果是中级
ysStr.Format("当前等级:中级");//显示
break;
case GAME_LEVEL_HIGH: //如果是高级
ysStr.Format("当前等级:高级");//显示
break;
}
MemDC.TextOut(30,30,ysStr);//输出文本(当前等级)

//绘制蛇的样式
CPen yspen;
yspen.CreatePen(1,1,RGB(255,255,255)); //定义白色画笔绘制蛇的边框
MemDC.SelectObject(&yspen);
CBrush ysbrush;

int k=m_body.GetUpperBound()+2; //设置一个变量存储贪吃蛇的身体长度 GetUpperBound可以获取数组的最高下标
if(k<=10) //如果小于10,那么就为绿色
{
ysbrush.CreateSolidBrush(RGB(0,255,0)); //创建一个具有指定颜色的逻辑刷子
MemDC.SelectObject(&ysbrush);
//绘制果实
MemDC.Rectangle(
CRect(10+m_psFood.y*10,
120+m_psFood.x*10,
10+(m_psFood.y+1)*10,
120+(m_psFood.x+1)*10)
);
}
else if(k>10&&k<=20) //如果在10和20之间,那么就为蓝色
{
ysbrush.CreateSolidBrush(RGB(0,0,255));
MemDC.SelectObject(&ysbrush);
//绘制果实
MemDC.Rectangle(
CRect(10+m_psFood.y*10,
120+m_psFood.x*10,
10+(m_psFood.y+1)*10,
120+(m_psFood.x+1)*10)
);
}

else //其余情况均为红色
{
ysbrush.CreateSolidBrush(RGB(255,0,0));
MemDC.SelectObject(&ysbrush);
//绘制果实
MemDC.Rectangle(
CRect(10+m_psFood.y*10,
120+m_psFood.x*10,
10+(m_psFood.y+1)*10,
120+(m_psFood.x+1)*10)
);
}
//初始化点数组
for(int i=0;i<=m_body.GetUpperBound();i++)
{
CPoint ysPoint=m_body.GetAt(i);
MemDC.Rectangle
(
CRect(10+ysPoint.y*10,
120+ysPoint.x*10,
10+(ysPoint.y+1)*10,
120+(ysPoint.x+1)*10)
);
}

dc.BitBlt( 0, 0, 325, 425, &MemDC,0, 0, SRCCOPY );

}

dc.BitBlt( 0, 0, 325, 425, &MemDC,0, 0, SRCCOPY ); 这一句是什么意思
展开
 我来答
迷若烟雨
2011-06-29 · 超过14用户采纳过TA的回答
知道答主
回答量:51
采纳率:0%
帮助的人:34.2万
展开全部
楼主这是在写贪吃蛇的游戏吧,函数原型:
BOOL BitBlt(int nXDest,int nYDest,int nWidth,int nHeight,HDC hdcSrc,int nXSrc,int nYSrc,DWORD dwRop);
该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。
hdcDest:指向目标设备环境的句柄。
  nXDest:指定目标矩形区域左上角的X轴逻辑坐标。
  nYDest:指定目标矩形区域左上角的Y轴逻辑坐标。
  nWidth:指定源和目标矩形区域的逻辑宽度。
  nHeight:指定源和目标矩形区域的逻辑高度。
  hdcSrc:指向源设备环境的句柄。
  nXSrc:指定源矩形区域左上角的X轴逻辑坐标。
  nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。
  dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。
  下面列出了一些常见的光栅操作代码:
  BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。
  DSTINVERT:表示使目标矩形区域颜色取反。
  MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。
  MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。
  NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。
  NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。
  PATCOPY:将特定的模式拷贝到目标位图上。
  PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。
  PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。
  SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。
  SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。
  SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。
  SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。
  SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。
  WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。
dc.BitBlt( 0, 0, 325, 425, &MemDC,0, 0, SRCCOPY );
就是把MemDC上(0,0)坐标点为左上角上的图复制到dc上矩形区域(0,0,325,425)。
nianzao40
2011-06-29 · 贡献了超过372个回答
知道答主
回答量:372
采纳率:0%
帮助的人:210万
展开全部
在“//不懂”处添加注释,谢谢了 楼主你好! 其实这很简单,是不是这一句,一目了然地可以看到,你建立了一个基于对话框的MFC工程,工程名叫“
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式