请教,类似手机中滑动屏幕切换窗口效果实现中的问题
如有两个窗口A B
在A窗口中,滑动(通过MouseMove控制)后显示窗口B,并使B活动
现在抓一张窗口B的图片,在窗口A中用DC拼合,并显示组合DC一部分的方式,
可以做出滑动的效果来(上网不方便,代码没有,大概意思如下)
窗口A:
用CreateCompatibleBitmap()建立两倍screen大小的图像
将窗体A的DC复制到左边,将窗口B的图片复制到右边
滑动时,显示图像的响应部分就行
但是这样的问题是,如果窗口B发生了改变(控件、数据等),则滑动时不能
体现这些变化
现在想使用直接获取窗口B的DC的方式来进行处理
(只需要滑动开始瞬间的状态就好,不需要实时状态)
但是通过GetWindowDC的方式不可实现,GetLastError后,错误码为0x06
怀疑句柄不对,用ShowWindow进行了测试,窗口B能够正常显示,此时GetWindowDC
可以成功,但是复制到组合图像上的DC图像不对,是窗口A的图像
试过使用GETDC也不行。
这是为什么?如果要实现上面的功能,该如何做?
[解决办法]
但是这样的问题是,如果窗口B发生了改变(控件、数据等),则滑动时不能
体现这些变化
--------------
可以使用消息通知窗口A进行刷新 或者强制刷新窗口A
[解决办法]
最近正好在搞wince界面特效,但我的是在一个窗口中切换界面A,B,和楼主的切换A,B窗口不一样。我是新手,说下自己的理解,正确与否不清楚。。。
1.设备DC只有一个,假如有窗口A,B(全屏),A显示则GetDC和GetWindowDC都是A的界面,B显示同理,都不显示则是桌面的画面,所以GetWindowDC其实是根据窗口是否显示以及窗口大小剪切设备DC相应位置的内容;
2.通过内存DC获取,窗体的绘制都是先绘制到内存DC再一次性拷贝到设备DC(自己的框架贴图,MFC或C#不清楚怎么绘制),拼接两个内存DC再拷贝到设备DC即可实现滑动效果;
3.通过设备DC获取,先显示A,GetWindowDC保存dc1,再显示B,GetWindowDC保存dc2,再拼接dc1和dc2(可选项,呵呵);
4.如果只是获取一次然后拼成两倍screen大小bmp,肯定不能反映实时状态;如果新建一个tempdc,每次绘制都是将dc1和dc2的相应像素拷贝过来,那整个滑动过程的图面都是实时的。