Windows界面编程第十三篇 位图显示特效合集

Windows界面编程第十三篇 位图显示特效合集       

        分类:            Windows编程 494人阅读 评论(1) 收藏 举报

本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5177047

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8696730

欢迎关注微博:http://weibo.com/MoreWindows

Windows界面编程之位图显示特效系列目录:

1. Windows界面编程第九篇位图显示特效交错效果》

http://blog.csdn.net/morewindows/article/details/8696720

2. Windows界面编程第十篇位图显示特效百叶窗效果》

http://blog.csdn.net/morewindows/article/details/8696722

3. Windows界面编程第十一篇位图显示特效随机积木效果》

http://blog.csdn.net/morewindows/article/details/8696724

4. Windows界面编程第十二篇位图显示特效飞入效果与伸展效果》

http://blog.csdn.net/morewindows/article/details/8696726

5. Windows界面编程第十三篇位图显示特效合集》

http://blog.csdn.net/morewindows/article/details/8696730

前面的四篇已经介绍了位图的交错效果百叶窗效果随机积木效果飞入效果与伸展效果。下面用一个程序将展示这些效果。这里给出主要代码(下载地址见:http://download.csdn.net/detail/morewindows/5177047)。代码中的DragAcceptFiles可以参考《Windows界面编程第七篇文件拖拽(文件拖放)》(http://blog.csdn.net/morewindows/article/details/8634451),主要是为了能将位图文件拖入到窗口中。

  1. LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
  2.     static int   s_nShow; 
  3.     static HDC   s_hdcMem; 
  4.     static int   s_nWidth, s_nHeight; 
  5.  
  6.     switch (message) 
  7.     { 
  8.     case WM_CREATE: 
  9.         { 
  10.             DragAcceptFiles(hwnd, TRUE);    
  11.             // 加载位图 
  12.             HBITMAP hBitmap;   
  13.             hBitmap = (HBITMAP)LoadImage(NULL, "107.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);   
  14.             if (hBitmap == NULL)   
  15.             {   
  16.                 MessageBox(hwnd, "LoadImage failed", "Error", MB_ICONERROR);   
  17.                 exit(0);   
  18.             } 
  19.             // 位图HDC 
  20.             HDC hdc = GetDC(hwnd); 
  21.             s_hdcMem = CreateCompatibleDC(hdc); 
  22.             SelectObject(s_hdcMem, hBitmap); 
  23.             ReleaseDC(hwnd, hdc); 
  24.  
  25.             // 计算位图宽高 
  26.             BITMAP bm; 
  27.             GetObject(hBitmap, sizeof(bm), &bm); 
  28.             s_nWidth = bm.bmWidth; 
  29.             s_nHeight = bm.bmHeight; 
  30.              
  31.  
  32.             s_nShow = 0; 
  33.         } 
  34.         return 0; 
  35.  
  36.  
  37.     case WM_KEYDOWN:    
  38.         switch (wParam)   
  39.         {   
  40.         case VK_ESCAPE: //按下Esc键时退出    
  41.             SendMessage(hwnd, WM_DESTROY, 0, 0);   
  42.             return 0;   
  43.         }   
  44.         break;  
  45.  
  46.     case WM_PAINT: 
  47.         { 
  48.             HDC             hdc;   
  49.             PAINTSTRUCT     ps;   
  50.             hdc = BeginPaint(hwnd, &ps); 
  51.             switch (s_nShow) 
  52.             { 
  53.             case 0: 
  54.                 BitBlt(hdc, 0, 0, s_nWidth, s_nHeight, s_hdcMem, 0, 0, SRCCOPY); 
  55.                 break
  56.              
  57.                 // 水平交错 
  58.             case 1: 
  59.                 AnimateDraw_StaggeredHorizontal(hdc, s_hdcMem, s_nWidth, s_nHeight); 
  60.                 break
  61.                 // 垂直交错 
  62.             case 2: 
  63.                 AnimateDraw_StaggeredVertical(hdc, s_hdcMem, s_nWidth, s_nHeight); 
  64.                 break
  65.                  
  66.                 // 水平百叶窗 
  67.             case 3: 
  68.                 AnimateDraw_JalousieHorizontal(hdc, s_hdcMem, s_nWidth, s_nHeight); 
  69.                 break
  70.                 // 垂直百叶窗 
  71.             case 4: 
  72.                 AnimateDraw_JalousieVertical(hdc, s_hdcMem, s_nWidth, s_nHeight); 
  73.                 break
  74.                  
  75.                 // 随机积木 
  76.             case 5: 
  77.                 AnimateDraw_RandomBlocks(hdc, s_hdcMem, s_nWidth, s_nHeight); 
  78.                 break
  79.                  
  80.                 // 飞入 从上往下 
  81.             case 6: 
  82.                 AnimateDraw_FlyingTopToBottom(hdc, s_hdcMem, s_nWidth, s_nHeight, 2, FALSE); 
  83.                 break
  84.                 // 飞入 从下往上 
  85.             case 7: 
  86.                 AnimateDraw_FlyingBottomToTop(hdc, s_hdcMem, s_nWidth, s_nHeight, 2, FALSE); 
  87.                 break
  88.                 // 飞入 从左往右       
  89.             case 8: 
  90.                 AnimateDraw_FlyingLeftToRight(hdc, s_hdcMem, s_nWidth, s_nHeight, 2, FALSE); 
  91.                 break
  92.                 // 飞入 从右往左 
  93.             case 9: 
  94.                 AnimateDraw_FlyingRightToLeft(hdc, s_hdcMem, s_nWidth, s_nHeight, 2, FALSE); 
  95.                 break
  96.  
  97.                 // 伸展 从上往下 
  98.             case 10: 
  99.                 AnimateDraw_FlyingTopToBottom(hdc, s_hdcMem, s_nWidth, s_nHeight); 
  100.                 break
  101.                 // 伸展 从下往上 
  102.             case 11: 
  103.                 AnimateDraw_FlyingBottomToTop(hdc, s_hdcMem, s_nWidth, s_nHeight); 
  104.                 break
  105.                 // 伸展 从左往右       
  106.             case 12: 
  107.                 AnimateDraw_FlyingLeftToRight(hdc, s_hdcMem, s_nWidth, s_nHeight); 
  108.                 break
  109.                 // 伸展 从右往左 
  110.             case 13: 
  111.                 AnimateDraw_FlyingRightToLeft(hdc, s_hdcMem, s_nWidth, s_nHeight); 
  112.                 break
  113.             } 
  114.             if (s_nShow != 0) 
  115.             { 
  116.                 s_nShow = 0; 
  117.                 InvalidateRect(hwnd, NULL, FALSE); 
  118.             } 
  119.             EndPaint(hwnd, &ps); 
  120.         } 
  121.         return 0; 
  122.  
  123.  
  124.     case WM_COMMAND: 
  125.         if (LOWORD(wParam) >= 40001 && LOWORD(wParam) <= 40013) 
  126.         { 
  127.             s_nShow = LOWORD(wParam) - 40000; 
  128.             InvalidateRect(hwnd, NULL, TRUE); 
  129.             return 0; 
  130.         } 
  131.         break
  132.  
  133.  
  134.         // 文件拖拽第三步 DragQueryFile and DragQueryFile 
  135.     case WM_DROPFILES: 
  136.         { 
  137.             HDROP hDrop = (HDROP)wParam; 
  138.             UINT nFileNum = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); // 拖拽文件个数 
  139.             char strFileName[MAX_PATH]; 
  140.             DragQueryFile(hDrop, 0, strFileName, MAX_PATH);//获得拖曳的文件名 
  141.             DragFinish(hDrop);      //释放hDrop 
  142.  
  143.             DeleteDC(s_hdcMem); 
  144.             // 加载位图 
  145.             HBITMAP hBitmap;   
  146.             hBitmap = (HBITMAP)LoadImage(NULL, strFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);   
  147.             // 位图HDC 
  148.             HDC hdc = GetDC(hwnd); 
  149.             s_hdcMem = CreateCompatibleDC(hdc); 
  150.             SelectObject(s_hdcMem, hBitmap); 
  151.             ReleaseDC(hwnd, hdc); 
  152.              
  153.             // 计算位图宽高 
  154.             BITMAP bm; 
  155.             GetObject(hBitmap, sizeof(bm), &bm); 
  156.             s_nWidth = bm.bmWidth; 
  157.             s_nHeight = bm.bmHeight; 
  158.              
  159.             InvalidateRect(hwnd, NULL, TRUE); 
  160.         } 
  161.         return 0;  
  162.  
  163.  
  164.     case WM_DESTROY: 
  165.         DeleteDC(s_hdcMem); 
  166.         PostQuitMessage(0); 
  167.         return 0; 
  168.     } 
  169.     return DefWindowProc(hwnd, message, wParam, lParam); 
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	static int   s_nShow;
	static HDC   s_hdcMem;
	static int   s_nWidth, s_nHeight;

	switch (message)
	{
	case WM_CREATE:
		{
			DragAcceptFiles(hwnd, TRUE);   
			// 加载位图
			HBITMAP hBitmap;  
			hBitmap = (HBITMAP)LoadImage(NULL, "107.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);  
			if (hBitmap == NULL)  
			{  
				MessageBox(hwnd, "LoadImage failed", "Error", MB_ICONERROR);  
				exit(0);  
			}
			// 位图HDC
			HDC hdc = GetDC(hwnd);
			s_hdcMem = CreateCompatibleDC(hdc);
			SelectObject(s_hdcMem, hBitmap);
			ReleaseDC(hwnd, hdc);

			// 计算位图宽高
			BITMAP bm;
			GetObject(hBitmap, sizeof(bm), &bm);
			s_nWidth = bm.bmWidth;
			s_nHeight = bm.bmHeight;
			

			s_nShow = 0;
		}
		return 0;


    case WM_KEYDOWN:   
        switch (wParam)  
        {  
        case VK_ESCAPE: //按下Esc键时退出   
            SendMessage(hwnd, WM_DESTROY, 0, 0);  
            return 0;  
        }  
        break; 

	case WM_PAINT:
		{
			HDC             hdc;  
			PAINTSTRUCT     ps;  
			hdc = BeginPaint(hwnd, &ps);
			switch (s_nShow)
			{
			case 0:
				BitBlt(hdc, 0, 0, s_nWidth, s_nHeight, s_hdcMem, 0, 0, SRCCOPY);
				break;
			
				// 水平交错
			case 1:
				AnimateDraw_StaggeredHorizontal(hdc, s_hdcMem, s_nWidth, s_nHeight);
				break;
				// 垂直交错
			case 2:
				AnimateDraw_StaggeredVertical(hdc, s_hdcMem, s_nWidth, s_nHeight);
				break;
				
				// 水平百叶窗
			case 3:
				AnimateDraw_JalousieHorizontal(hdc, s_hdcMem, s_nWidth, s_nHeight);
				break;
				// 垂直百叶窗
			case 4:
				AnimateDraw_JalousieVertical(hdc, s_hdcMem, s_nWidth, s_nHeight);
				break;
				
				// 随机积木
			case 5:
				AnimateDraw_RandomBlocks(hdc, s_hdcMem, s_nWidth, s_nHeight);
				break;
				
				// 飞入 从上往下
			case 6:
				AnimateDraw_FlyingTopToBottom(hdc, s_hdcMem, s_nWidth, s_nHeight, 2, FALSE);
				break;
				// 飞入 从下往上
			case 7:
				AnimateDraw_FlyingBottomToTop(hdc, s_hdcMem, s_nWidth, s_nHeight, 2, FALSE);
				break;
				// 飞入 从左往右		
			case 8:
				AnimateDraw_FlyingLeftToRight(hdc, s_hdcMem, s_nWidth, s_nHeight, 2, FALSE);
				break;
				// 飞入 从右往左
			case 9:
				AnimateDraw_FlyingRightToLeft(hdc, s_hdcMem, s_nWidth, s_nHeight, 2, FALSE);
				break;

				// 伸展 从上往下
			case 10:
				AnimateDraw_FlyingTopToBottom(hdc, s_hdcMem, s_nWidth, s_nHeight);
				break;
				// 伸展 从下往上
			case 11:
				AnimateDraw_FlyingBottomToTop(hdc, s_hdcMem, s_nWidth, s_nHeight);
				break;
				// 伸展 从左往右		
			case 12:
				AnimateDraw_FlyingLeftToRight(hdc, s_hdcMem, s_nWidth, s_nHeight);
				break;
				// 伸展 从右往左
			case 13:
				AnimateDraw_FlyingRightToLeft(hdc, s_hdcMem, s_nWidth, s_nHeight);
				break;
			}
			if (s_nShow != 0)
			{
				s_nShow = 0;
				InvalidateRect(hwnd, NULL, FALSE);
			}
			EndPaint(hwnd, &ps);
		}
		return 0;


	case WM_COMMAND:
		if (LOWORD(wParam) >= 40001 && LOWORD(wParam) <= 40013)
		{
			s_nShow = LOWORD(wParam) - 40000;
			InvalidateRect(hwnd, NULL, TRUE);
			return 0;
		}
		break;


		// 文件拖拽第三步 DragQueryFile and DragQueryFile
	case WM_DROPFILES:
		{
			HDROP hDrop = (HDROP)wParam;
			UINT nFileNum = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); // 拖拽文件个数
			char strFileName[MAX_PATH];
			DragQueryFile(hDrop, 0, strFileName, MAX_PATH);//获得拖曳的文件名
			DragFinish(hDrop);      //释放hDrop

			DeleteDC(s_hdcMem);
			// 加载位图
			HBITMAP hBitmap;  
			hBitmap = (HBITMAP)LoadImage(NULL, strFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);  
			// 位图HDC
			HDC hdc = GetDC(hwnd);
			s_hdcMem = CreateCompatibleDC(hdc);
			SelectObject(s_hdcMem, hBitmap);
			ReleaseDC(hwnd, hdc);
			
			// 计算位图宽高
			BITMAP bm;
			GetObject(hBitmap, sizeof(bm), &bm);
			s_nWidth = bm.bmWidth;
			s_nHeight = bm.bmHeight;
			
			InvalidateRect(hwnd, NULL, TRUE);
		}
		return 0; 


	case WM_DESTROY:
		DeleteDC(s_hdcMem);
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd, message, wParam, lParam);
}

下面是程序所展示的一种显示效果(图片不能打开,请访问http://blog.csdn.net/morewindows/article/details/8696730

更多显示效果可以参考前面的交错效果百叶窗效果随机积木效果飞入效果与伸展效果博客中的示例。

本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5177047

转载请标明出处,原文地址:http://blog.csdn.net/morewindows/article/details/8696730

欢迎关注微博:http://weibo.com/MoreWindows

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值