如何使用屏幕截屏做程序背景

来源:互联网 发布:mac怎么卸载插件 编辑:程序博客网 时间:2024/06/15 11:51

最近要做一个程序,是在别人的程序基础上,加一个外壳来操作,我首先就是想到了windows的那个经典屏保,气泡,这个程序就是利用当前截屏做背景,而后就开始在网上查阅各种资料。找到两个方法可以获取当前截屏

1,在程序里发送VK_SNAPSHOT按键,而后OpenClipboard();而后GetClipboardData(CF_BITMAP),这个函数获取的是DDB图片,而后把这个DDB图片转成DIB,而后因为我的程序程序使用OpenGL做图形,所以因为我学的知识少,只能把它转成DIB,而后保存,而后再用LoadImage(),把保存的那个bmp导入,而后在用GetObject(HBITMAP,sizeof(bm),&bm);来获取DIB的数据,而后生成纹理glTexImage2D()。实际我感觉这样肯定不是最好的方法,最好肯定是可以直接使用DDB来做纹理,但暂时只用这个吧

2,第二种方法获取截屏是使用GetDC(NULL),这个函数,以NULL来做参数调用GetDC就可以获取当前屏幕截屏,而后创建一个Compatible的内存DC和一个compatible的bitmap,把bitmap载入到memDC,而后使用BitBlt()把全屏DC的位图数据信息传到memDC里面(这块使用一个memDC是因为我想保存调出我的程序前的那个原程序的界面,而窗口DC是不断更新的,所以没法暂时保留运行画面),而后保存memDC里面的位图信息,和上面那个方法一样,而后获取,而后生成纹理

这里面第二个方法,在给memDC创建位图时,位图大小要是GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),全屏大小,这样就可以把整个屏幕做背景