软件类专周报告 联系客服

发布时间 : 星期五 文章软件类专周报告更新完毕开始阅读62913e5233687e21af45a9f1

nWidth 目标矩形的宽度(逻辑单位)。 nHeight 目标矩形的高度(逻辑单位)。 pSrcDC 指定源设备上下文。 xSrc 源矩形左上角的X逻辑坐标。 ySrc 源矩形左上角的Y逻辑坐标。 nSrcWidth 源矩形的宽度(逻辑单位)。 nSrcHeight 源矩形的高度(逻辑单位)。

dwRop 指定光栅操作。 SRCCOPY 将源位图拷贝到目标位图。 */ }

CRect CMainFrame::GetPictRect(int nRow, int nCol) //获取指定位置图片的原始位置和大小

{ }

CRect CMainFrame::GetDistRect(int nRow, int nCol) //获得当前目标小方形的左上和右下坐标

{

double width, height; //目标位置的宽和高

CRect rect; //一个CRect包含用于定义矩形的左上角和右下角点的成员变量。 GetClientRect(rect); //调用该函数获取控件的客户区的尺寸 width = (double)rect.Width() / (m_nCol+1); height = (double)rect.Height() / m_nRow; //要留出一个像素的边框大小

return CRect((int)(nCol * width + 1), (int)(nRow * height + 1),

(int)(nCol * width + width), (int)(nRow * height + height)); //返回当前小方double height = (double)s_bmp.bmHeight / m_nRow; //原方块高 double width = (double)s_bmp.bmWidth / m_nCol; //原方块宽 return CRect((int)(nCol * width), (int)(nRow * height),

(int)(nCol * width + width), (int)(nRow * height + height)); /返回小方形大小 }

mDC.DeleteDC(); //DeleteDC成员函数删除和当前CDC对象中的m_hDC有联

}

系的Windows设备上下文

形的左上和右下坐标

第 11 页

}

void CMainFrame::MoveSpace(int dx, int dy) {

//找到目标位置的方块 int i, j;

bool find = false;

for (i = 0; i < m_nRow; i++) { }

//修改目标位置的方块的位置 diam[i][j].x = space.x; diam[i][j].y = space.y; //修改空白方块的位置 space.x += dx; space.y += dy; //重绘这两处

CRect rS = GetPictRect(i, j); //图块的原位置和大小

CRect r1 = GetDistRect(diam[i][j].y, diam[i][j].x); //图块的新位置和大小 CRect r2 = GetDistRect(space.y, space.x); //空白方块的位置的大小 CDC mDC, *pDC = GetDC(); //得到设备描述表

mDC.CreateCompatibleDC(pDC); //创建内存,产生与pDC指定设备兼容的设备mDC.SelectObject(m_bmp); //将对象选入设备上下文中,CDC类为特定类型的

for (j = 0; j < m_nCol; j++) { }

if (find) break;

if (diam[i][j].x == space.x + dx && diam[i][j].y == space.y + dy) { }

find = true; break;

上下文内存,只有在位图已被创建并被选入设备上下文之中时,才使用GDI输出函数。 GDI对象提供了五种形式,包括画笔、画刷、字体、位图和区域。最新选中的对象将覆盖同类型的前一个对象。

pDC->StretchBlt(r1.left, r1.top, r1.Width(), r1.Height(),

第 12 页

}

&mDC, rS.left, rS.top, rS.Width(), rS.Height(), SRCCOPY);

CBrush brush;

brush.CreateStockObject(WHITE_BRUSH); //白色的画刷 pDC->FillRect(r2, &brush);

mDC.DeleteDC(); //DeleteDC成员函数删除和当前CDC对象中的m_hDC有ReleaseDC(pDC); //释放CDC对象 CheckFinish();

联系的Windows设备上下文

void CMainFrame::HelpMe() {

CDC *pDC = GetDC(); CDC mDC;

mDC.CreateCompatibleDC(pDC); //创建内存,产生与pDC指定设备兼容的设mDC.SelectObject(m_bmp); //将对象选入设备上下文中,CDC类为特定类型

备上下文内存,只有在位图已被创建并被选入设备上下文之中时,才使用GDI输出函数。 的GDI对象提供了五种形式,包括画笔、画刷、字体、位图和区域。最新选中的对象将覆盖同类型的前一个对象。

}

第 13 页

for (int i = 0; i < m_nRow; i++) { }

mDC.DeleteDC(); //DeleteDC成员函数删除和当前CDC对象中的m_hDC有ReleaseDC(pDC); //释放CDC对象

Sleep(5000); //获取在帮助时的时间 Invalidate(); //使CWnd的整个客户区无效

for (int j = 0; j < m_nCol; j++) { }

CRect r1, r2; r1 = GetDistRect(i, j); r2 = GetPictRect(i, j);

pDC->StretchBlt(r1.left, r1.top, r1.Width(), r1.Height(),

&mDC, r2.left, r2.top, r2.Width(), r2.Height(), SRCCOPY);

联系的Windows设备上下文

4. 小结

设计结果:基本完成,能正常运行,但还有些不周密的地方。

问题分析:缺点是1、把空白方块移动到蓝色方块(不会使用、没有图片的方块)时蓝色方块会变成白色方块被移出来。

2、没有把原位图载入在旁边。

3、不能在关闭程序后保留玩家玩到的级别。

心得体会:这次专周,经过一周的努力我体会到了从整体构思到步步实践这其中不乏艰辛与喜悦。我对MFC编程也有了进一步的了解,也更加熟悉这种编程的有关函数的作用和使用,例如学会怎样加载图片,怎样分割图片,怎样使图片的位置随机产生,怎样使用VC++程序的帮助,怎样查找自己不懂的系统函数。我也能在专周中学会自己独立查找问题、分析问题、解决问题。通过这次专周我把这两学期所学的知识融会贯通了,能做到学以致用了。

致谢:能够完成此次专周任务,既有自己的努力,也有室友和老师的帮助和指导在此我忠心的感谢杨老师和室友在这次专周中的指导和帮助。

5. 参考文献

《Visual C++程序设计基础教程》 武汉大学出版社 《Visual C++程序面向程序设计教程与实验》

清华大学出版社

《MFC Windows 应用程序设计》 清华大学出版社 《Visual C++6.0从入门到精通》 电子工业出版社

第 14 页

考核情况(由指导老师填写)

项目 得分 考勤 记录 考勤 (20%) 考勤日期 出勤记录 验收 (40%) 验 收 情 况

第 15 页

报告 (20%) 总分