QQ登录

只需一步,快速开始

116上位机VC MFC图片下上左右飞入伸展显示

[ 复制链接 ]

116上位机VC MFC图片下上左右飞入伸展显示

116上位机VC MFC图片下上左右飞入伸展显示

116上位机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);//加载位图
BITMAP bm;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.在OnPaint()中显示图片 CDC *pDC = GetDC(); CDC MemDC;
MemDC.CreateCompatibleDC(pDC);MemDC.SelectObject(m_hBitmap);
BITMAP bm;GetObject(m_hBitmap,sizeof(bm),&bm);

pDC->BitBlt(0,0, bm.bmWidth, bm.bmHeight, &MemDC, 0, 0, SRCCOPY);
4.实现伸展效果函数FlyBmp()及在OnSysCommand()函数中调用函数
  1. void CGkbc8Dlg::FlyBmp(UINT nDirect)
  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. //><
  12.         CRect rc;
  13.         GetClientRect(rc);
  14.         pDC->FillRect(rc,NULL);//先擦除背景
  15. //><
  16.         int nIntervalTime = 10;//间隔时间
  17.         int i = 0;
  18.         switch(nDirect)//图片上下,下上,左右,右左伸展
  19.         {
  20.         case 0:
  21.                 for (i = 0; i <= bm.bmHeight; i+=20)
  22.                 {
  23.                         pDC->BitBlt(0, 0, bm.bmWidth, i, &MemDC, 0, 0, SRCCOPY);
  24.                         Sleep(nIntervalTime);
  25.                 }
  26.                 break;
  27.         case 1:
  28.                 for (i = bm.bmHeight; i >= 0; i-=20)
  29.                 {
  30.                         pDC->BitBlt(0, i, bm.bmWidth, bm.bmHeight - i, &MemDC, 0, i, SRCCOPY);
  31.                         Sleep(nIntervalTime);
  32.                 }
  33.                 break;
  34.         case 2:
  35.                 for (i = 0; i <= bm.bmWidth; i+=20)
  36.                 {
  37.                         pDC->BitBlt(0, 0, i, bm.bmHeight, &MemDC, 0, 0, SRCCOPY);
  38.                         Sleep(nIntervalTime);
  39.                 }
  40.                 break;
复制代码
  1. case 3:
  2.                 for (i = bm.bmWidth; i >= 0; i-=20)
  3.                 {
  4.                         pDC->BitBlt(i, 0, bm.bmWidth - i, bm.bmHeight, &MemDC, i, 0, SRCCOPY);
  5.                         Sleep(nIntervalTime);
  6.                 }
  7.                 break;
  8.         default:
  9.                 break;
  10.         }
  11.         pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &MemDC, 0, 0, SRCCOPY);
  12.         ReleaseDC(pDC);
  13. }
  14.         else if(nID == 999)
  15.         {
  16.         //        FlyBmp(0);//上下
  17.         //        FlyBmp(1);//下上
  18.         //        FlyBmp(2);//左右
  19.                 FlyBmp(3);//右左
  20.         }
复制代码
下面我们来演示功能实现过程
请点击此处下载

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

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

文件名称:116.上位机VC MFC图片下上左右飞入伸展显示.rar 
文件大小:502.07 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

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

  

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

  

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


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索