⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap11_6.htm

📁 vc教程,真正的程序员用Visual C++。如果你想当程序员
💻 HTM
📖 第 1 页 / 共 3 页
字号:
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">capacility
              </td>
              <td width="67%">
                <p align="JUSTIFY">查询设备能力
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">close
              </td>
              <td width="67%">
                <p align="JUSTIFY">关闭设备
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">info
              </td>
              <td width="67%">
                <p align="JUSTIFY">查询设备的信息
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">open
              </td>
              <td width="67%">
                <p align="JUSTIFY">打开设备
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">pause
              </td>
              <td width="67%">
                <p align="JUSTIFY">暂停设备的播放或记录
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">play
              </td>
              <td width="67%">
                <p align="JUSTIFY">开始设备播放
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">record
              </td>
              <td width="67%">
                <p align="JUSTIFY">开始
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">resume
              </td>
              <td width="67%">
                <p align="JUSTIFY">恢复暂停播放或记录的设备
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">seek
              </td>
              <td width="67%">
                <p align="JUSTIFY">改变媒体的当前位置
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">set
              </td>
              <td width="67%">
                <p align="JUSTIFY">改变设置
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">status
              </td>
              <td width="67%">
                <p align="JUSTIFY">查询设备状态信息
              </td>
            </tr>
            <tr> 
              <td width="33%">
                <p align="JUSTIFY">stop
              </td>
              <td width="67%">
                <p align="JUSTIFY">停止设备的播放或记录
              </td>
            </tr>
          </table>
          <p> </p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">  例如,上面的例子打开了一个CD播放机后,可以发送常用的命令来控制CD机:</p>
          <blockquote> 
            <blockquote> 
              <p align="JUSTIFY">play cdaudio from &lt;位置&gt; to &lt;位置&gt;。若省略from则从当前磁道开始播放,若省略to则播放到结束。</p>
              <p align="JUSTIFY">pause cdaudio。暂停播放。</p>
              <p align="JUSTIFY">stop cdaudio。停止播放。</p>
              <p align="JUSTIFY">resume cdaudio。继续被暂停的播放。</p>
              <p align="JUSTIFY">status cdaudio number of tracks。查询CD的磁道数。status 
                cdaudio current track可以查询当前磁道。</p>
              <p align="JUSTIFY">seek cdaudio to &lt;位置&gt;。移动到指定磁道。</p>
              <p align="JUSTIFY">set cdaudio door open/closed。弹出或缩进CD盘。</p>
              <p align="JUSTIFY">close cdaudio。关闭设备。</p>
            </blockquote>
          </blockquote>
          <p> </p>
          <p align="JUSTIFY">  MCI设备可以按简单设备和复合设备进行分类。象cdaudio这样的设备不使用文件,我们称之为简单设备,而复合设备在播放时要用到数据文件,如数字视频(digitalvideo)和波形音频(waveaudio)设备,我们把这些数据文件叫做设备元素。</p>
          <p align="JUSTIFY">  在打开一个复合设备时要指定设备名和设备元素。例如,下面命令打开一个波形音频设备:</p>
          <p align="JUSTIFY">open mysound.wav type waveaudio</p>
          <p align="JUSTIFY">  可以只为复合设备指定设备元素,例如:</p>
          <p align="JUSTIFY">open mysound.wav</p>
          <p align="JUSTIFY">  如下面所示,系统通过查找注册表或WIN.INI的[mci extensions]可以确定打开哪一个设备。</p>
          <blockquote> 
            <p align="JUSTIFY">[mci extensions]</p>
            <p align="JUSTIFY">mid=Sequencer</p>
            <p align="JUSTIFY">rmi=Sequencer</p>
            <p align="JUSTIFY">wav=waveaudio</p>
            <p align="JUSTIFY">avi=AVIVideo</p>
          </blockquote>
          <p align="JUSTIFY">  有时,程序需要多次打开同一设备来播放不同的数据文件。例如,谁也不能否认在屏幕上同时播放两个AVI文件的可能性,在这种情况下,需要为每次打开的设备起一个不同的别名,这样MCI才能区分两个播放设备。例如,下面这段代码打开并播放了两个AVI文件:</p>
          <blockquote> 
            <p align="JUSTIFY">char buf[50];</p>
            <p align="JUSTIFY">mciSendString(&quot;open dillo.avi type avivideo 
              alias dillo&quot;,buf,strlen(buf),NULL);</p>
            <p align="JUSTIFY">mciSendString(&quot;play dillo repeat&quot;,buf,strlen(buf),NULL); 
              //重复播放</p>
            <p align="JUSTIFY">mciSendString(&quot;open search.avi type avivideo 
              alias search&quot;,buf,strlen(buf),NULL);</p>
            <p align="JUSTIFY">mciSendString(&quot;play search&quot;,buf,strlen(buf),NULL);</p>
          </blockquote>
          <p align="JUSTIFY">在用open命令打开设备时,如果指定了别名,则以后对该设备的操作都要使用别名。</p>
          <p align="JUSTIFY">  到目前为止,我们使用的都是MCI命令字符串。读者可能己经有了这样的体会,命令字符串具有简单易学的优点,但这种接口与C/C++的风格相去甚远,如果程序要查询和设置大量数据,那么用字符串的形式将很不方便。</p>
          <p align="JUSTIFY">  MCI的命令消息接口提供了C语言接口,它速度更快,并且更能符合C/C++程序员的需要。所有MCI命令消息都是通过mciSendCommand函数发送的,该函数的声明为:</p>
          <blockquote> 
            <p align="JUSTIFY">MCIERROR mciSendCommand(</p>
            <p align="JUSTIFY">MCIDEVICEID IDDevice, //设备的ID,在打开设备时不用该参数</p>
            <p align="JUSTIFY">UINT uMsg, //命令消息</p>
            <p align="JUSTIFY">DWORD fdwCommand, //命令消息的标志</p>
            <p align="JUSTIFY">DWORD dwParam //指向包含命令消息参数的结构</p>
            <p align="JUSTIFY">); //若成功则返回0,否则返回错误码</p>
          </blockquote>
          <p> </p>
          <p align="JUSTIFY">清单11.8的代码演示了用MCI命令消息来打开和重复播放一个AVI文件:</p>
          <p align="JUSTIFY"><b> </b></p>
          <b> 
          <p align="JUSTIFY">清单11.8</p>
          </b> 
          <p align="JUSTIFY">MCI_DGV_OPEN_PARMS mciOpen;</p>
          <p align="JUSTIFY">UINT wDeviceID;</p>
          <p align="JUSTIFY">MCIERROR mciError;</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">mciOpen.lpstrDeviceType = &quot;avivideo&quot;; //设备名</p>
          <p align="JUSTIFY">mciOpen.lpstrElementName = &quot;dillo.avi&quot;; 
            //设备元素</p>
          <p align="JUSTIFY"> </p>
          <p align="JUSTIFY">mciError=mciSendCommand(0, MCI_OPEN, </p>
          <p align="JUSTIFY">MCI_OPEN_TYPE|MCI_OPEN_ELEMENT, //使用了设备元素</p>
          <p align="JUSTIFY">(DWORD)&amp;mciOpen);</p>
          <p align="JUSTIFY">if(mciError)</p>
          <p align="JUSTIFY">{</p>
          <p align="JUSTIFY">char s[80];</p>
          <p align="JUSTIFY">mciGetErrorString(mciError,s,80);</p>
          <p align="JUSTIFY">AfxMessageBox(s);</p>
          <p align="JUSTIFY">return ;</p>
          <p align="JUSTIFY">}</p>
          <p align="JUSTIFY">wDeviceID=mciOpen.wDeviceID; //保存设备ID</p>
          <p align="JUSTIFY">MCI_DGV_PLAY_PARMS mciPlay;</p>
          <p align="JUSTIFY">mciError=mciSendCommand(wDeviceID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, 
          </p>
          <p align="JUSTIFY">(DWORD)&amp;mciPlay);</p>
          <p align="JUSTIFY"><b>. . .</b></p>
          <p align="JUSTIFY">  可以看出,用命令消息比用命令字符串要复杂的多。命令消息与命令字符串是对应的,例如,open与MCI_OPEN完成的是一样的功能。变量wDeviceID用来保存设备的ID,系统用ID来标识不同的设备,以保证命令发给正确的对象。</p>
          <p align="JUSTIFY">  限于篇幅,对MCI的命令消息就不作详细介绍了。</p>
          <div align="center">
            <center>
              <table border="0" cellpadding="0" cellspacing="0" width="615">
                <tr> 
                  <td><a href="chap11_5.htm">上一页</a></td>
                  <td>
                    <p align="right"><a href="chap11_7.htm">下一页</a>
                  </td>
                </tr>
              </table>
              <p><a href="http://www.cpcw.com">电脑报首页</a> <a href="../../index.htm">网络学院首页</a></p>
            </center>
          </div>
          <font size="5">
          <hr noshade color="#3973DE" size="1">
          </font>
          <p align="center"><font size="5"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual 
            C++王朝(Where programmers come together)</a>协助制作<br>
            未经许可,请勿以任何形式复制</font>
        </td>
      </tr>
    </table>
    </center>
</div>

</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -