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 ); 这一句是什么意思 展开
{
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 ); 这一句是什么意思 展开
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)。
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)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询