QQ登录

只需一步,快速开始

114上位机VC MFC图片的马赛克积木效果显示

[ 复制链接 ]

114上位机VC MFC图片的马赛克积木效果显示

114上位机VC MFC图片的马赛克积木效果显示

114上位机VC MFC图片的马赛克积木效果显示


功能展示

图片的显示有各种效果,如积木,百叶窗,滚动等等,我们当前例程实现积木效果,在程序系统菜单点击积木,可以看到效果,如果程序启动界面用到此效果,会很有视觉感,具体效果如图;
要点提示
图片的几种特效可以应用设备上下文件的函数BitBlt()来实现,函数原形为BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop ); 它的参数很多,能够灵活应用,会有不一样的效果,参数含义为 X,Y:目标矩形的左上角坐标, nWidth, nHeight目标矩形要显示的长与宽, pSrcDC被复制的设备上下文指针, xSrc , ySrc要被复制的矩形左上角坐标, nSrcWidth ,nSrcHeight要被复制在矩形长与宽, dwRop 为光栅操作类型,类型众多,我们当前例程用到复制类型SRCCOPY   ;





实现功能
1.新建基于对话框的应用程序
2.在主对话框中添加变量HBITMAP m_hBitmap;并在对话框的OnInitDialog()中初始化m_hBitmap = (HBITMAP)LoadImage(NULL, “res/1.bmp”, IMAGE_BITMAP, 0, 0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);//加载位图 BITMAPbm;
GetObject(m_hBitmap,sizeof(bm),&bm);SetWindowPos(&wndTop,0,0,bm.bmWidth,bm.bmHeight,SWP_NOMOVE);//窗口大小与位图同大 //GetSystemMenu(FALSE)->InsertMenu(IDM_ABOUTBOX,MF_BYCOMMAND|MF_STRING,999,"图片积木");//系统菜单添加按钮
3.添加函数void BlockBmp();实现图片积木效果;函数可在OnSysCommand()中调用 else if(nID == 999) { BlockBmp();  //执行图片积木 }

4.图片的显示可以在OnPaint()函数中绘制
  1. //图片显示
  2.         CDC *pDC = GetDC();
  3.         CDC MemDC;
  4.         MemDC.CreateCompatibleDC(pDC);
  5.         MemDC.SelectObject(m_hBitmap);
  6.         BITMAP bm;
  7.         GetObject(m_hBitmap,sizeof(bm),&bm);
  8.         pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &MemDC, 0, 0, SRCCOPY);
复制代码
  1. void CGkbc8Dlg::BlockBmp()//位图积木显示
  2. {
  3.         if(m_hBitmap==NULL) return;
  4. //><准备设备上下文
  5.         CDC *pDC = GetDC();
  6.         CDC MemDC;
  7.         MemDC.CreateCompatibleDC(pDC);
  8.         MemDC.SelectObject(m_hBitmap);
  9.         BITMAP bm;
  10.         GetObject(m_hBitmap,sizeof(bm),&bm);
  11.         CRect rc;
  12.         GetClientRect(rc);
  13.         pDC->FillRect(rc,&CBrush(RGB(0,0,0)));//先涂黑再积木               
  14.     UINT nIntervalTime = 5;//小块显示的间隔时间                  
  15.         int nRowBlocks = 10;
  16.     int nColBlocks = 10;//横竖块数
  17.         int nStepRow   = bm.bmWidth / nRowBlocks;
  18.         int nStepCol   = bm.bmHeight / nColBlocks;//块间隔像素
  19.         int nSumBlocks = nRowBlocks * nColBlocks; //总块数
  20.         bool *pFlagArray = new bool[nSumBlocks];//标识是否已显示过
  21.         memset(pFlagArray, 0, sizeof(bool) * nSumBlocks);
  22.         srand((unsigned)time(NULL));
  23.         int nDisplayCount = 0; //已显示方格个数
  24.         while (true)
  25.         {
  26.                 int row = rand() % nRowBlocks;
  27.                 int col = rand() % nColBlocks;
  28.                 if (pFlagArray[row * nColBlocks + col]) //已显示已从头继续
  29.                         continue;
  30.                 pFlagArray[row * nColBlocks + col] = true;//标记已显示过

  31.                 pDC->BitBlt(row * nStepRow, col * nStepCol, nStepRow, nStepCol, &MemDC, row * nStepRow, col * nStepCol, SRCCOPY);
  32.                 nDisplayCount++;
  33.                 if (nDisplayCount >= nSumBlocks)
  34.                         break;
  35.                 Sleep(nIntervalTime);
  36.         }
  37.         pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &MemDC, 0, 0, SRCCOPY);
  38.         delete []pFlagArray;
  39. }
复制代码
我们来演示下功能实现的整个过程

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:114.上位机VC MFC图片的马赛克积木效果显示.rar 
文件大小:522.57 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!



回复

使用道具 举报

快速回复 返回列表 客服中心 搜索