困扰了几天的问题呀,把弹出的播放窗口用movewindows移动了地方就放不了? 我用的是api 的mciSendString 来播放的avi文件的,play后,弹出来一个窗口, 但是直接在左上角,我不喜欢,想直接弹到屏幕中间放的,用了movewindows方法,弹是弹到了 屏幕中间,但就是播放不了,那个在左上角的播放画面也没消失,到网上查了几天也没办法解决呀, 后来又换用了SetWindowPos,SendMessage,都是和上样一样的问题,关闭不了程序,直到程序死掉..我是新手才学了10几天,对你们说很菜的问题,对我们才学的人真是大大的难题呀,焦急的盼望着你的回答,,
等待中.......还请高手们赐教呀,, 

解决方案 »

  1.   

    用MoveWindow没有遇到过类似问题,楼主把代码贴出来看看
      

  2.   

    都不知道你是怎么用MCI的,MCI命令本来就可以移动窗口。
    语句是这样的:
    put 你的设备名称 window at 屏幕左边 屏幕上边 窗口宽度 窗口高度
    举个例子:Dim MyLeft As Long
    Dim MyTop As Long
    MyLeft = Screen.Width/15/2-320
    MyTop = Screen.Height/15/2-240
    '这个语句在你播放媒体后使用
    mciExecute "put MyMCIDC window at " & MyLeft & " " & MyTop & " 640 480"
    还有,MCI不是一定要弹出窗口的,可以指定到一个容器里的,比如可以指定到PictureBox里
    只要改改打开媒体文件的MCI语句就可以了,语句这样写:
    open 文件路径 TYPE MPEGVideo ALIAS 你的设备名称 STYLE child PARENT 父窗口句柄
    举个例子:mciExecute "open C:\1.wmv TYPE MPEGVideo ALIAS MyMCIDC STYLE child PARENT " & Picture1.hWnd
    记住,MCI的设备名称很重要,要移动他或控制他都是靠设备名称操作的
      

  3.   

    你可以在自己的窗体中播放,比如Form2。否则系统会自己弹出一个窗口来播放,本来,获得这个窗口的句柄,可以很容易控制它,对于生手来讲,可能有点难了,要用到一些API。
    '在窗体Form1中放2个命令按钮Command1、Command2,1个滑杆控件Slider1,1个图片框控件Picture1,Picture1和Slider1的宽度可以不一样,1个定时器控件Timer1
    '再添加一个窗体Form2Option 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 Long
    Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
    Private Const WS_CHILD = &H40000000  '用于建立播放视频窗口的样式Dim S As String, fName As String, sName As StringFunction mciVideoStretch(MCIfile As String, formTV As Form) 'MCI视频图像缩放函数
           On Error Resume Next
           Dim strMCI As String
           strMCI = "put " & MCIfile & " window at 0 0 " & formTV.ScaleWidth & " " & formTV.ScaleHeight
           Call mciSendString(strMCI, vbNullString, 0, 0)
    End Function
    Private Sub Command1_Click()
            
             
            On Error Resume Next
            
            Form2.Visible = True
            
            fName = "E:\下载音乐\我和你(演唱者莎拉布菜曼刘欢)_北京2008年第29届奥运会主题歌高清视频720×576.avi"
            S = String(LenB(fName), Chr(0))
            GetShortPathName fName, S, Len(S)
            sName = Left(S, InStr(S, Chr(0)) - 1)        mciSendString "stop MEDIA", vbNullString, 0, 0
            mciSendString "close MEDIA", vbNullString, 0, 0
            
            'Call mciSendString("open " & Trim(sName) & " alias MEDIA", vbNullString, 256, 0)
            Call mciSendString("open " & Trim(sName) & " alias MEDIA parent " & Form2.hWnd & " style " & WS_CHILD & " WAIT", vbNullString, 256, 0)
            
            S = String(256, Chr(0))
            mciSendString "status MEDIA length", S, Len(S), 0
            Slider1.Max = Val(S) * 1000 / 25
            Slider1.Min = 0
            Slider1.TickFrequency = Int(Val(S) * 1000 / 75)
            Timer1.Enabled = True
            Picture1.BackColor = RGB(74, 74, 82)
            
            mciSendString "play MEDIA", vbNullString, 0, 0
            'Call mciVideoStretch("MEDIA", Form2)  '调用视频缩放函数
    End SubPrivate Sub Command2_Click()
            On Error Resume Next
            Timer1.Enabled = False
            mciSendString "pause MEDIA", vbNullString, 0, 0
            mciSendString "stop MEDIA", vbNullString, 0, 0
            mciSendString "close MEDIA", vbNullString, 0, 0
    End SubPrivate Sub Form_Load()
            Form1.BackColor = &H0&
            Command1.Caption = "播放音乐"
            Command2.Caption = "停止播放"
            Picture1.BackColor = &HC0C000
            Picture1.FillColor = &H0&
            Picture1.ForeColor = &H80000008
            Picture1.Height = 65 '图片框的高度
            Timer1.Interval = 100
            Timer1.Enabled = False
            Form2.Visible = False
            Form2.Left = (Screen.Width - Form2.Width) / 2
            Form2.Top = (Screen.Height - Form2.Height) / 2
            
            Form2.ScaleMode = 3 '这句非常非常重要,你把这句去掉,看有什么效果End SubPrivate Sub Form_Unload(Cancel As Integer)
            Unload Form2
    End SubPrivate Sub Timer1_Timer()
            'Dim S As String '记录当前时间
            Dim cjlS1 As Long, cjlS2 As Long
            Dim cjlDB As Double
            
            On Error Resume Next
            Call mciVideoStretch("MEDIA", Form2)  '调用视频缩放函数
            S = String(256, Chr(0))
            mciSendString "status MEDIA position", S, Len(S), 0
            Slider1.Value = Val(S) * 1000 / 25 '当前播放时间进度,单位是毫秒
            
            '除以1000全都化成秒
            cjlS1 = (Slider1.Value / 1000) * Int(Picture1.Width / (Slider1.Max / 1000)) '基本值
            cjlDB = (Picture1.Width / (Slider1.Max / 1000)) - Int(Picture1.Width / (Slider1.Max / 1000))
            cjlS2 = Int((Slider1.Value / 1000) * (cjlDB)) '误差
            Picture1.Line (0, 0)-(cjlS1 + cjlS2, Picture1.Height), RGB(157, 217, 253), BF '播放时间进度显示器
    End Sub
      

  4.   

    到下面去下载楼上这个VB工程文件:
    http://download.csdn.net/source/634750