|
|
[bgcolor=#ffffff]转载请标明出处,原文地址:[/bgcolor][bgcolor=#ffffff]http://blog.csdn.net/morewindows/article/details/8696730[/bgcolor]
[bgcolor=#ffffff]前面的四篇已经介绍了位图的[/bgcolor]交错效果[bgcolor=#ffffff]、[/bgcolor]百叶窗效果[bgcolor=#ffffff]、[/bgcolor]随机积木效果[bgcolor=#ffffff]、[/bgcolor]飞入效果与伸展效果[bgcolor=#ffffff]。[/bgcolor]
[bgcolor=#ffffff]下面用一个程序将展示这些效果。这里给出主要代码[/bgcolor]
[bgcolor=#ffffff]代码中的DragAcceptFiles可以参考《Windows界面编程第七篇文件拖拽(文件拖放)》.[/bgcolor][bgcolor=#ffffff]主要是为了能将位图文件拖入到窗口中。[/bgcolor]
[bgcolor=#ffffff][/bgcolor]- 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);
- }
复制代码 [bgcolor=#ffffff]下面是程序所展示的一种显示效果[/bgcolor]
[bgcolor=#ffffff][p_w_upload=1159]
[/bgcolor]
[bgcolor=#ffffff]更多显示效果可以参考前面的[/bgcolor]交错效果[bgcolor=#ffffff]、[/bgcolor]百叶窗效果[bgcolor=#ffffff]、[/bgcolor]随机积木效果[bgcolor=#ffffff]、[/bgcolor]飞入效果与伸展效果[bgcolor=#ffffff]中的示例。[/bgcolor]
[bgcolor=#ffffff]完整的程序在[/bgcolor][bgcolor=#ffffff]http://www.hifyl.com/read.php?tid=2763[/bgcolor]
|
|