博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Windows界面编程第十三篇 位图显示特效合集
阅读量:5966 次
发布时间:2019-06-19

本文共 4184 字,大约阅读时间需要 13 分钟。

本文配套程序下载地址为:

转载请标明出处,原文地址:

欢迎关注微博:

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

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

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

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

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

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

 

前面的四篇已经介绍了位图的。下面用一个程序将展示这些效果。这里给出主要代码(下载地址见:)。代码中的DragAcceptFiles可以参考《Windows界面编程第七篇文件拖拽(文件拖放)》(),主要是为了能将位图文件拖入到窗口中。

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);}

下面是程序所展示的一种显示效果(图片不能打开,请访问

更多显示效果可以参考前面的博客中的示例。

本文配套程序下载地址为:

转载请标明出处,原文地址:

欢迎关注微博:

 

 

你可能感兴趣的文章
c# 多线程 调用带参数函数
查看>>
大型网站系统架构的演化
查看>>
JQuery 如何选择带有多个class的元素
查看>>
The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar
查看>>
VS快速生成JSON数据格式对应的实体
查看>>
Word2vec 模型载入(tensorflow)
查看>>
Linux内核——定时器和时间管理
查看>>
J2EE之初识JSP
查看>>
RabbitMq消息序列化简述
查看>>
别人要访问我的电脑上部署的tomcat,必须关闭防火墙吗?
查看>>
opencv2使用形态学滤波对图像进行边缘及角点检測
查看>>
Git协作流程(转)
查看>>
iOS UI-自动布局(Autoresizing)
查看>>
i.e., e.g., etc.
查看>>
计算机视觉与模式识别代码合集第二版three
查看>>
Android studio SweetAlert for Android
查看>>
sql中的CHARINDEX和暂时表
查看>>
火炬之光模型导出(Unity载入火炬之光的模型)
查看>>
git忽略文件【转】
查看>>
Web上的支持的图片格式以及它们之间的区别
查看>>