我用picturebox,和mmcontrol,做的播放器播放mpeg文件(只播放mpeg)
调节picturebox的大小,后发现mpeg 的视图大小不会跟着变
有没有办法解决

解决方案 »

  1.   

    picturebox,和mmcontrol
    不能改用其他控件
      

  2.   

    ' 我一般用MCI做。Option Explicit
    Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As LongPrivate Sub Command1_Click()
        PlayVideo "c:\123.avi", False, Picture1.hwnd
    End SubPrivate Sub Command2_Click()
        Picture1.Width = Picture1.Width + Picture1.Width * 0.1
        Picture1.Height = Picture1.Height + Picture1.Height * 0.1
    End SubPrivate Sub Form_Load()
        Picture1.ScaleMode = vbPixels
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        mciSendString "close video", 0, 0, 0
    End SubPrivate Sub Picture1_Resize()
        mciSendString "put video window at 0 0 " & Picture1.ScaleWidth & " " & Picture1.ScaleHeight, 0, 0, 0
    End Sub' 播放指定磁盘中的视频文件
    ' FilaName 为视频文件的文件名, FullScreen 为是否全屏幕播放, hwnd 为播放窗口的句柄
    Function PlayVideo(ByVal FileName As String, ByVal FullScreen As Boolean, Optional ByVal hwnd As Long) As Boolean
        mciSendString "close video", 0, 0, 0
        If hwnd = 0 Then
            mciSendString "open " & FileName & " alias video", 0, 0, 0
        Else
            mciSendString "open " & FileName & " alias video parent " & hwnd & " style child", 0, 0, 0
        End If
        mciSendString "set video time format ms", 0, 0, 0
        PlayVideo = mciSendString("play video from 0 " & IIf(FullScreen, "fullscreen", ""), 0, 0, 0)
    End Function
      

  3.   

    goodname008(卢培培,充电中......) 
    谢谢您的例子您有没有发现
    没有按Command2改变Picture1大小前,,
    不管Picture1多大
    视屏的大小都是352*288(我的程序只播放MPEG文件)我可能没有说清楚,在生成.exe时视屏的大小是固定的
    就是设计时确定大小,我用这样的怪着:就是在播放后,马上加了改大小
       ( PlayVideo "D:\work\class\driver\Cache1.mpg", False, Picture1.hwnd
        
        Picture1.Width = Picture1.Width + Picture1.Width * 0.01
        Picture1.Height = Picture1.Height + Picture1.Height * 0.01)
    可是又有一个问题,屏幕抖动(因为视屏播放过程有要求不可以抖动)还有一个想问:如果换成这两句
        Picture1.Width = Picture1.Width + 1
        Picture1.Height = Picture1.Height + 1
    就不行(视屏不改变大小),不过如果在Command2多点几下就可以,这是什么原因
      

  4.   

    用如下代码试一下,我播放avi可以改变大小的
     mciSendString "close MyAVI", vbNullString, 0, 0         
            mciCommand = "open " & playname & " alias MyAVI"
            mciCommand = mciCommand & " parent " & Picture1.hWnd & " style child"
            mciSendString mciCommand, vbNullString, 0, 0
            
            With Picture1
                .ScaleMode = vbPixels
                mciCommand = "put MyAVI window at 0 0 " & _
                             .ScaleWidth & " " & .ScaleHeight
                mciSendString mciCommand, vbNullString, 0, 0
            End With
            
            mciSendString "play MyAVI", vbNullString, 0, 0
      

  5.   

    080 (菜鸟学爬) :
    借贵帖一用,谢谢!登山者:
    我看了很多你回复的关于视频的帖,请教一个问题:
    如何在视频的播放窗口上放一个透明的控件,如Label.