|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 无符号整形 于 2016-6-18 20:30 编辑
改进自《Windows程序设计》仅供参考!
警告:屏幕乱别怪我
提醒:注销或者重启吧!除非你会解锁
- #include <windows.h>
- #define NUM 32767
- LRESULT 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;
- }
复制代码
原理:
第一步 禁止更新屏幕
第二步 用GetDCEx获取屏幕HDC,把他放进位图
第三步 算出屏幕分辨率,把截图的结果大小/10重新显示
第四步 把获取的图形显示并随机分配位置
第五步 重新开始,进行32767次循环!
链接:
百度云:http://pan.baidu.com/s/1kV72Xqn 无密码
360云:https://yunpan.cn/cRkRwD3EWv7Tm 访问密码 7710
如果发生找不到msvcr120.dll的情况,请下载msvcr120.dll,并把它拷贝到主程序的目录。
360云 msvcr120.dll https://yunpan.cn/cRkRLPIwDfnYz 访问密码 422e
百度云 msvcr120.dll http://pan.baidu.com/s/1dFNUnwH 无密码
|
|