本文配套程式為: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),主要是為了能將位元影像檔案拖入到視窗中。
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); }// 位元影像HDCHDC 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 DragQueryFilecase 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); //釋放hDropDeleteDC(s_hdcMem);// 載入位元影像HBITMAP hBitmap; hBitmap = (HBITMAP)LoadImage(NULL, strFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION); // 位元影像HDCHDC 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