| 发表于:2007-10-12 14:03:51 楼主 |
mydlg类数据成员: cwindowdc *windowdc; cdc memdc; void mydlg::oninitdialog() { //....... windowdc = new cwindowdc(null); memdc.createcompatible(windowdc); cbitmap membitmap; membitmap.createcompatiblebitmap(windowdc, 1024, 768); //@1 memdc.selectobject(&membitmap); //@2 memdc.bitblt(0, 0, 1024, 768, windowdc, 0, 0, srccopy); } void mydlg::ontimer(uint nidevent) { cdc tempdc; tempdc.createcompatible(windowdc); cbitmap bit; bit.createcompatiblebitmap(windowdc, 1024, 768); tempdc.selectobject(&bit); tempdc.bitblt(0, 0, 1024, 768, &memdc, 0, 0, srccopy); //....... //..在tempdc设备上绘图 //....... windowdc-> bitblt(0, 0, 1024, 768, &memdc, 0, 0, srccopy); } 上面的大家都能看懂, 在oninitdialog()初始化时, 创建了一个memdc保存了桌面的截图, 然后在定时器中在桌面截图上绘制 我有两上问题: 1> 去掉@1 @2两行为什么就绘制时背景是黑色的呢? 难道默认创建的dc没有画布(cbitmap对象),必须自己创建? 2> oninitdialog函数中membitmap;是临时变量,被选进memdc后会马上因为oninitdialog函数的结束而结束生命期. 而最后在tempdc把memdc的membitmap通过bitblt复制过来时却是正常的. 为什么? |
|
|
|
|