wince 下实现IPHONE的平滑切换

看了网上的一篇文章,里面介绍怎么实现Iphone的平滑效果。

网站地址:http://www.itwis.com/html/net/netother/20100618/8578.html

效果如图:

 

 

两个不同的图片代表的是不同的窗口,红色的方框指代的是我们的屏幕。当我们从左到右进行绘制时,如果绘制的帧数足够多,在红色框框中看到的,就是平滑的滚动。

 

    如果以伪代码的形式,那么我们的程序结构就可以如此:

 

//获取两个窗口的HDC

 HDC hdcWnd1 = GetRealDC(hWnd1);

 HDC hdcWnd2 = GetRealDC(hWnd2);

 

 //将两个窗口DC组合成一个缓存HDC

 HDC hdcAll = CombineDC(hdcWnd1,hdcWnd2);

 

 //HDC,即真正绘制到屏幕上的HDC

 HDC hdcSource = GetDC(NULL);

 

 //如果绘制的起点等于HDC的一半时,意味着已经绘制到最后,直接跳出循环

 for(DWORD dwPos = 0; dwPos < GetWidthForDC(hdcAll) / 2; ++ dwPos)

 {

  //将缓存HDC绘制到源HDC中,以实现平滑滚动的效果

  BltBit(hdc,

      0,

      0,

      ScreenWidth,

      ScreenHeight,

      hdcAll,

      dwPos,

      0,

      SRCCOPY)

 }

 

 

 

 

 

 

 

根据这个,我也想试下这个效果。于是我就拿以前做的例子做下试验。

 

这是一个控件使用的例子,左边按钮,右边显示标签页。

然后想改进标签页的切换。

 

 

 

然后在按钮里面添加这些内容做测试。

 

// 测试

 

       CDC* pDC=GetDC();

       CRect Rect2;

    Rect2.left = 112;

       Rect2.top = 20;

       Rect2.bottom = Rect2.top + 190;

       Rect2.right = Rect2.left + 370;

 

 

    DWORD width = Rect2.right - Rect2.left;

       DWORD hight = Rect2.bottom - Rect2.top;

 

   

       HDC hdcwnd1 =  ::GetDC(App[2]->GetSafeHwnd());  // App[] 是标签页的类实例 ,由App[0]->Create(IDD_DIALOG1,this); 之类创建

       HDC hdcwnd2 =  ::GetDC(App[1]->GetSafeHwnd());

 

 

 

    if (hdcwnd1 == NULL || hdcwnd2 == NULL)

    {

              MessageBox(_T("得不到句柄"));

    }

 

       HDC hdcAll  = CreateCompatibleDC(hdcwnd2);

    HBITMAP hBitMap=CreateCompatibleBitmap(pDC->m_hDC,width*2,hight);

       SelectObject(hdcAll,hBitMap);

 

       BitBlt(hdcAll,0,0,width,hight,hdcwnd1,0,0,SRCCOPY);

       BitBlt(hdcAll,width,0,width,hight,hdcwnd2,0,0,SRCCOPY);

 

       for (DWORD dwPos = 0;dwPos <= width;dwPos += 2)

       {

              BitBlt(pDC->m_hDC,

                        Rect2.left,

                        Rect2.top,

                        width,

                        hight,

                        hdcAll,

                        dwPos,

                        0,

                        SRCCOPY

                        );

             

 

       }

 

 

 

效果如图,虽然得到切换的效果,不过得不到标签页的HDC,显示的东西很奇怪。

 

 恩,修改后不用标签页,然后就对不准了,而且切换还是错的,最后跳的才是正确的也没,好糟~~~~

 

 

恩,第三次修改

 

 

 

 

 

切换时没问题啦,不过好像getdc 只能得到看得见的窗口的内容~~,有个方案,不用getdc ,而是用对话框的图片,好像能行,不过要生成图片好像也挺麻烦的。

这一次修改其实还可以,就是有一个bug,你要切换的话,至少得截屏一次,如果三个页面的话,至少有两次会有空白,如果每个页面都访问到了的话,之后就正常了。

你可能感兴趣的:(wince 下实现IPHONE的平滑切换)