我现在想用VB实现动画效果,比如我自己在窗体上绘制一小块图案,然后用键盘控制它的移动,请问在VB中有哪些方法可以实现这种功能?强调:不是移动图片框,而是移动自己绘制的图案!

解决方案 »

  1.   

    我想没别的办法,获取键盘输入后,再将图案逐个象素的拷贝平移
    还有注意设置窗体的KeyPreview为True
      

  2.   

    在获取键盘事件的问题上,我还有一点小问题,就是如果我响应上下左右键的话,其结果是焦点在窗体的几个按钮上移来移去,现在我只能用IJKL等键来代替方向键,请问有什么解决办法?另外象素的拷贝平移要用哪些函数来实现?
      

  3.   

    handsomge(汗衫) 的想法和我的一样,不过我不太明白如果消除图案在上一个位置时的痕迹?最好能提供要用到的一些函数,具体的使用方法我可以自己去看。
      

  4.   

    【声明】
    Public Declare Function BitBlt Lib "gdi32" Alias "BitBlt" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    【说明】
    将一幅位图从一个设备场景复制到另一个。源和目标DC相互间必须兼容
    【返回值】
    Long,非零表示成功,零表示失败。会设置GetLastError
    【参数表】
      hDestDC --------  Long,目标设备场景  x,y ------------  Long,对目标DC中目标矩形左上角位置进行描述的那个点。用目标DC的逻辑坐标表示  nWidth,nHeight -  Long,欲传输图象的宽度和高度  hSrcDC ---------  Long,源设备场景。如光栅运算未指定源,则应设为0  xSrc,ySrc ------  Long,对源DC中源矩形左上角位置进行描述的那个点。用源DC的逻辑坐标表示  dwRop ----------  Long,传输过程要执行的光栅运算
    【其它】
    在NT环境下,如在一次世界传输中要求在源设备场景中进行剪切或旋转处理,这个函数的执行会失败
      如目标和源DC的映射关系要求矩形中像素的大小必须在传输过程中改变,那么这个函数会根据需要自动伸缩、旋转、折叠、或切断,以便完成最终的传输过程
      

  5.   

    yefanqiu(叶帆) 所说的方法,具我的理解应该只能对矩形区域的位图进行操作,可是我要移动的是不规则的图案,如果移动包括此图案的最小矩形区域,是否会影响到其背景图案的显示?
      

  6.   

    ,在Paint事件里完成全部重画,需要重画时调用Object.Refresh.
    为了防止闪烁,可以在一个同样大小,但是不可见的PictureBox完成之后,再将隐藏的图片整个画到当前图片框。
      

  7.   

    yefanqiu(叶帆):你能稍微详细的讲讲图片蒙板的操作吗,和你前面讲的BitBlt函数是一回事吗?
    handsomge(汗衫):也许你还没有明白我的意思,我直接说吧,我想实现在一个俄罗斯方块的小游戏,需要用键盘控制各种不规则形状方块的移动。现在你应该明白我想要的是什么效果了吧。我觉得用PictureBox实现起来可能不太方便。
      

  8.   

    另外我想到一个方法,不过有点小问题,我该如何得到窗体上一个指定矩形区域的HDC?