C/C++屏幕恶搞程序
生活随笔
收集整理的這篇文章主要介紹了
C/C++屏幕恶搞程序
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
運行結(jié)果如下圖:
原理:
第一步 禁止更新屏幕第二步 用GetDCEx獲取屏幕HDC,把他放進位圖
第三步 算出屏幕分辨率,把截圖的結(jié)果大小/10重新顯示
第四步 把獲取的圖形顯示并隨機分配位置
第五步 重新開始,進行32767次循環(huán)!
#include <windows.h>#define NUM 32767LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) {static int iKeep[NUM][4];HDC hdcScr, hdcMem;int cx, cy;HBITMAP hBitmap;HWND hwnd;int i, j, x1, y1, x2, y2;if (LockWindowUpdate(hwnd = GetDesktopWindow())){hdcScr = GetDCEx(hwnd, NULL, DCX_CACHE | DCX_LOCKWINDOWUPDATE);hdcMem = CreateCompatibleDC(hdcScr);cx = GetSystemMetrics(SM_CXSCREEN) / 10;cy = GetSystemMetrics(SM_CYSCREEN) / 10;hBitmap = CreateCompatibleBitmap(hdcScr, cx, cy);SelectObject(hdcMem, hBitmap);srand((int)GetCurrentTime());for (i = 0; i < 2; i++)for (j = 0; j < NUM; j++){LockWindowUpdate(hwnd = GetDesktopWindow());if (i == 0){iKeep[j][0] = x1 = cx * (rand() % 10);iKeep[j][1] = y1 = cy * (rand() % 10);iKeep[j][2] = x2 = cx * (rand() % 10);iKeep[j][3] = y2 = cy * (rand() % 10);}else{x1 = iKeep[NUM - 1 - j][0];y1 = iKeep[NUM - 1 - j][1];x2 = iKeep[NUM - 1 - j][2];y2 = iKeep[NUM - 1 - j][3];}BitBlt(hdcMem, 0, 0, cx, cy, hdcScr, x1, y1, SRCCOPY);BitBlt(hdcScr, x1, y1, cx, cy, hdcScr, x2, y2, SRCCOPY);BitBlt(hdcScr, x2, y2, cx, cy, hdcMem, 0, 0, SRCCOPY);}DeleteDC(hdcMem);ReleaseDC(hwnd, hdcScr);DeleteObject(hBitmap);}return 0; }
總結(jié)
以上是生活随笔為你收集整理的C/C++屏幕恶搞程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WEB安全基础-PHP+MySQL实践
- 下一篇: 2.3链表的补充