我现在要做一个效果,就是起始点在屏幕的60,150处有一个192*170的图片(相当于一个按钮)
我鼠标点下时,一副新图BMP(800*600),在60,150处显示,只显示这副图在该坐标位置且大小为192*170的部分图像。接着逐渐扩大到显示全图。该怎么实现这个效果?我大概知道是BitBlt,循环贴图,可是怎么贴还是很晕呀~~~还有个效果,就是新图在60,150处现实全部图像,不过是被压缩成192*170大小,接着逐渐变大到800*600,高手来指导一下把~~~感激不尽

解决方案 »

  1.   

    设定一个Timer,OnTimer里边逐次BitBlt。
    BOOL BitBlt(
       int x,
       int y,
       int nWidth,
       int nHeight,
       CDC* pSrcDC,
       int xSrc,
       int ySrc,
       DWORD dwRop 
    );
    设置nWidth和nHeight就可以了。图像不会被拉伸
      

  2.   

    我希望能用FOR循环或者WHILE去处理。放在TIMER里面会卡,我用的不是WINDOWS系统。也不是X86CPU,不过API设的和WIN32的差不多就是了。而且你上面的代码似乎还是不能完成我要的功能。仅是在一个位置贴图,我要的是图片的逐渐放大
    1、整图的由小到大
    2、图的局部,到整体,
    要能有一个看的出来的过程,且放大是要均匀的。
      

  3.   

    没问题啊,你只要调整bitblt时的左上角坐标就行了啊,如过你要用循环,应该另起一个线程,防止阻塞主线程,使其他消息得不到及时相应
    int x = 60, y = 150;
    //每次放大一圈(5个像素点)
    for (int i =0; i < 次数; i++)
        bitbit(x - i * 5, y - i* 5, width + i * 10, height + i * 10, srcdc, x - i * 5, y - i* 5, SRCCOPY);大体这样
      

  4.   

    不放在 timer 就开一条工作线程吧。
      

  5.   

    njchf() 你可能没理解我的意思。照你的程序,最后bitblt时的左上角坐标就不是(0,0)了。我最后的图片是要800*600满屏幕显示的。
    也就是说bitbit(x - i * 5, y - i* 5, width + i * 10, height + i * 10, srcdc, x - i * 5, y - i* 5, SRCCOPY);这句中的X,Y是不能同样的比率变化的。因为原图的起始点在左边偏上的地方。
      

  6.   

    照你的程序,最后bitblt时的左上角坐标就不是(0,0)了。我最后的图片是要800*600满屏幕显示的。
    也就是说bitbit(x - i * 5, y - i* 5, width + i * 10, height + i * 10, srcdc, x - i * 5, y - i* 5, SRCCOPY);这句中的X,Y是不能同样的比率变化的。因为原图的起始点在左边偏上的地方。____________那我一开始也理解有点偏差。不知道你是什么系统,不过用双缓冲总是可以的。循环太快了,要用循环的话不妨另开一个线程。