本人想做一个数码照片的放映器,
一个picture控件用于显示照片,
picture控件中放了一个label控件用于显示图片的标题信息(label是移动的)
之前使用loadpicture调用图片,图片只能显示一部分,
改用paintpicture后可以全部显示了,但是当label移动时或窗口被覆盖后照片就没有了,只剩下窗体的背景了请问高手有什么方法可以使大的照片成比例完全显示,标签移动后其它窗口覆盖后也不会消失呀!

解决方案 »

  1.   

    Private Sub Form_Load()
    Picture1.AutoRedraw = TrueEnd Sub
      

  2.   

    另外可以用,picturebox+image,利用image的Stretch属性。
      

  3.   

    Picture1.AutoRedraw = True
    autoredraw重绘 picture1.picture=picture.image
    image后台
    picture前台
      

  4.   

    用 AutoRedraw 创建持久的图形
    每个窗体和图片框都具有 AutoRedraw 属性。AutoRedraw 是 Boolean 属性,当它设置为 True 时,会把图形输出保存在内存里。可用 AutoRedraw 属性创建持久的图形。持久的图形
    Microsoft Windows 操纵屏幕图象,来造成重叠窗口的影像。当一个窗口移到其它窗口上时,可暂时隐藏其它窗口,移过后,被覆盖的窗口和它的内容需要重新显示。Windows 管理和控制窗口与控件的重新显示。而用户的 Visual Basic 应用程序必须控制窗体和图片框内图形的重新显示。如果在窗体上用图形方法创建图形,通常希望它们重新显示在以前的位置 (persistent graphics),可用 AutoRedraw 属性创建持久的图形。AutoRedraw 和窗体
    AutoRedraw 的缺省值是 False。当 AutoRedraw 设置为 False,窗体上显示的任何由图形方法创建的图形如果被另一个窗口暂时挡住,将会丢失。另外,如果扩大窗体,窗体边界外的图形将会丢失。设置 AutoRedraw 为 False 的效果如图 12.6 所示。图 12.6 设置 AutoRedraw 为 False 的效果当窗体的 AutoRedraw 属性设置为 True 时,Visual Basic 会将图形方法适用于内存中的一块“画布”上。应用程序复制此画布的内容,以便重新显示被其它窗口暂时隐藏起来的图形。在大多数情况下,该窗体画布的大小即屏幕的大小。如果窗体的 MaxButton 属性为 False 且窗体的边界不可调,那么该画布的大小即窗体的大小。当窗体大小可调时,该画布也可使应用程序保存超出窗体边界之外的图形。设置 AutoRedraw 为 True 的结果显示在图 12.7 中。图 12.7 设置 AutoRedraw 为 True 的效果AutoRedraw 和图片框
    当图片框的 AutoRedraw 属性设置为 True 时,Visual Basic 仅在内存保存此图片框的可视内容。这是因为保存图片框内容的画布,与图片框大小是相同的。超出其外的图形被裁剪后,既使改变图片框的大小,也不能再显示。使用非持久的图形
    可将窗体及其所有图片框的 AutoRedraw 设置为 False 来节省内存。但那样的图形将不再自动成为持久性的。需要时必须用代码管理所有图形的重画。可将所有想要重画的线、圆、点的代码,包括在窗体或图片框的 Paint 事件中。这种方式最适用于有限个易于重建的图形。无论何时需要重画窗体或图片框的一部分时,都可调用 Paint 事件过程—例如,当覆盖住对象的窗口移去后,或重新调整窗体大小使得图形恢复可视时。如果 AutoRedraw 设置为 True,除非应用程序显式地调用它,否则,该对象的 Paint 过程不会被调用执行。因为对象的可视内容保存在画布中,所以不需要 Paint 事件。注意,使用非持久的图形的决定,会影响图形在窗体或容器上的绘制方法。“用 ClipControls 裁剪区域”和“用 AutoRedraw 和 ClipControls 使图形分层”中讨论了决定是否需用非持久的图形的其它因素。运行时改变 AutoRedraw 的设置
    运行时可以改变 AutoRedraw 的设置。如果 AutoRedraw 的设置为 False,图形和 Print 方法的输出,只输出到屏幕,不到内存。当 AutoRedraw 设置为 True 时,如果用 Cls 方法清除对象,已有输出并不能被清除。这是因为输出保存在内存,必须再次设置 AutoRedraw 为 True,才能用 Cls 方法清除。详细信息 为了得到有关 AutoRedraw 的性能含义,请参阅第十五章“性能和兼容性设计”的“优化显示速度”。为了得到有关 AutoRedraw 的性能含义的说明,请参阅“性能和兼容性设计”中的“优化显示速度”。
      

  5.   

    AutoRedraw 属性
          返回或设置从图形方法到持久图形.的输出。语法object.AutoRedraw [= boolean]AutoRedraw 属性语法包含下面部分:部分 描述 
    object 对象表达式,其值是“应用于”列表中的一个对象。 
    Boolean 布尔表达式,指定如何重绘对象,“设置值”中有详细描述。 
    设置值boolean 的设置值如下:设置值 描述 
    True 使 Form 对象或 PictureBox 控件的自动重绘有效。图形和文本输出到屏幕,并存储在内存的图象中。该对象不接受绘制事件,必要时,用存储在内存中的图象进行重绘。 
    False (缺省值)使对象的自动重绘无效,且将图形或文本只写到屏幕上。 当需要重画该对象时,Visual Basic 会激活对象绘制事件。 
    说明使用下列图形方法工作,如:Circle、Cls、Line、Point、Print 和 Pset,该属性极为重要。利用这些方法,在改变对象大小或隐藏在另一个对象后又重新显示的情况下,设置 AutoRedraw 为 True,将在 Form 或 PictureBox 控件中自动重绘输出。 运行时 在程序中设置 AutoRedraw,可以在画持久图形(如背景色或网格)和临时图形之间切换。如果设置 AutoRedraw 为 False,以前的输出成为背景屏幕的一部分。当 AutoRedraw 设置为 False,用 Cls 方法清除绘图区时不会删除背景图形。把 AutoRedraw 改回 True 后,再用 Cls 将清除背景图形。注意 如果设置 BackColor 属性,所有图形和文本,包括持久图形,都被清除。一般来说,除非 AutoRedraw 设置为 True,所有图形都需用 Paint 事件显示。要取回在 AutoRedraw 设置为 True 时创建的持久图形,用 Image 属性。当 AutoRedraw 设置为 True 时,用对象的 hDC 属性可以将持久图形传送给Windows API。如果设置窗体的 AutoRedraw 属性为 False,然后最小化该窗体,则将 ScaleHeight 和 ScaleWidth 属性设置为图标大小。在 AutoRedraw 设置为 True 时,ScaleHeight 和 ScaleWidth 保持为恢复窗口的尺寸。如果设置 AutoRedraw 属性为 False,Print 方法将在诸如 Image 和 Shape 等图形控件的顶部打印。
      

  6.   

    何不使用image控件?把stretch设置为True?
      

  7.   

    不要用paintpicture,它也是封装了API bitblt的,直接使用API函数StretchBlt全部显示完。先用API绘图,后显示标题信息!
      

  8.   

    只是显示图片的话,使用image控件就足够了,还直接支持缩放