VC++问题集8

 71.mciSendCommand 函数可以向多媒体发送命令,相应设备接收到命令后就会实现相应的功能。
 比如发送MCI_OPEN命令来打开设备,发送MCI_STATUS命令获取设备的状态,也就是检查
 光驱中是否有CD及CD中曲目的数量,发送MCI_PLAY命令实现CD曲目的播放。
 如下为示例代码:
 ::mciSendCommand (NULL,
                      MCI_OPEN,
                      MCI_WAIT | MCI_OPEN_SHAREABLE|
                      MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID ,
                      (DWORD)(LPVOID) &OpenParms);
 注:使用此函数需要包含MMSystem.h头函数。
72.如何把一个应用程序的图标显示在系统托盘中。
 要把一个应用程序的图标显示在系统托盘中可以调用Shell_NotifyIcon函数。
 此函数的原型为:
 WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage,
                         PNOTIFYICONDATA pnid); 
 第一个参数可以为一下值:
 NIM_ADD  Adds an icon to the status area.
 NIM_DELETE  Deletes an icon from the status area.
 NIM_MODIFY  Modifies an icon in the status area. 
 第二个参数标志这与应用程序相关的信息。其类型为NOTIFYICONDATA的指针。
 如下示例代码:
 NOTIFYICONDATA data;
 data.hWnd=m_hWnd;
 data.uCallbackMessage=WM_ONTRAY;
 data.uFlags=NIF_MESSAGE|NIF_ICON;
 data.hIcon=m_hIcon;
 data.uID=IDR_MAINFRAME;
 Shell_NotifyIcon(NIM_ADD,&data);
73.如何实现声音录制与播放
 要实现声音的录制与播放我们可以使用MCI函数。通过MCIWndCreate函数创建一个窗体句柄,
 主要在该窗体中实现声音的录制;创建窗体句柄后通过MCIWndNew函数打开录音设备,
 通过MCIWndCanRecord函数判断是否可以录音,如果可以则通过MCIWndRecord进行声音录制。
 播放录音可以使用MCIWndPlay函数。
 下面为示例代码:
 在stdafx.h加入
 #include<vfw.h>
 #pragma comment(lib,"vfw32.lib")
 定义HWND句柄
 HWND mciwav;
 录音
 MCIWndClose(mciwav);
 mciwav=MCIWndCreate(this->m_hWnd,::AfxGetApp()->m_hInstance,WS_CAPTION,NULL);
 MCIWndNew(mciwav,"waveaudio");
     if(MCIWndCanRecord(mciwav))  
          MCIWndRecord(mciwav);
 停止
 MCIWndStop(mciwav);
 播放
 if(MCIWndCanPlay(mciwav))
  MCIWndPlay(mciwav);

74.如何播放WAV文件
 播放WAV文件需要使用Winmm.lib库,该库包含了声音的录制,CD的播放何光驱的播放等许多
 多媒体函数。
 播放WAV文件的步骤:
 首先定义MCIDEVICEID变量,用来设置设备ID号;定义MCI_OPEN_PARMS变量,用来设置打开
 设备类型;定义MCI_PLAY_PARMS变量,设置播放回调函数。
 然后使用mciSendCommand函数的MCI_OPEN命令打开播放WAV文件的设备,
 获得mciOpenParms 变量的wDeviceID值,再通过MCI_OPEN_PARMS变量设置lpstrElementName
 属性,该属性时WAV文件的路径,通过mciSendCommand函数将文件打开。最后使用
 mciSendCommand函数的MCI_PLAY命令播放文件。
75.如何控制左右声道
 我们可以通过waveOutGetVolume函数来获得系统的音量,通过waveOutSetVolume函数来设置
 系统的音量。系统的音量是一个DWORD值,它的前两个字节表示左声道的音量,后两个字节表示
 右声道的音量。系统当前音量何0x0000FFFF值做与运算可以得到系统左声道的音量;
 系统当前音量何0xFFFF0000做与运算可以得到系统右声道的音量。

文件的基本操作

76.创建和删除文件夹
 使用API函数CreateDirectory可以创建文件夹,使用GetCurrentDirectory函数可以在一个
 缓冲区中装载当前目录。相关函数的说明请查阅MSDN。
 如下为示例代码:
 创建文件夹
 char buf[256];
 ::GetCurrentDirectory(256,buf); //获取程序根目录路径
 m_name.GetWindowText(name);
 strcat(buf,"//");
 strcat(buf,name);
 if(CreateDirectory(buf,NULL))
 {
  MessageBox("文件夹创建成功!");
  return;
 }
 删除文件夹
 char buf[256];
 ::GetCurrentDirectory(256,buf);
 m_name.GetWindowText(name);
 strcat(buf,"//");
 strcat(buf,name);
 if(RemoveDirectory(buf))
 {
  MessageBox("文件夹删除成功!");
  return;
 }

77.如何将文件删除到回收站中
 SHFileOperation是Windows提供的对文件系统对象进行删除、移动、复制等操作
 的API函数。
 函数原型如下:
 WINSHELLAPI int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);
 我们可以通过设置SHFILEOPSTRUCT结构体的对象来控制对文件的操作。
 typedef struct _SHFILEOPSTRUCTA
 {
         HWND            hwnd;
          UINT            wFunc;
           LPCSTR          pFrom;
            LPCSTR          pTo;
            FILEOP_FLAGS    fFlags;
      BOOL            fAnyOperationsAborted;
       LPVOID          hNameMappings;
      LPCSTR          lpszProgressTitle; // only used if FOF_SIMPLEPROGRESS
 } SHFILEOPSTRUCTA, FAR *LPSHFILEOPSTRUCTA;
 如下为示例代码;
 char fileName[100]="/0";
 strcpy(fileName,strText);
 strcat(fileName,"/0");
 SHFILEOPSTRUCT shfile;
 shfile.hwnd = 0;
 shfile.wFunc = FO_DELETE;
 shfile.pFrom = fileName;
 shfile.pTo = NULL;
 shfile.fFlags = FOF_ALLOWUNDO;
 shfile.hNameMappings = NULL;
 shfile.lpszProgressTitle =NULL ;
 SHFileOperation(&shfile);

78.如何清除回收站?
 我们可以通过SHEmptyRecycleBin函数来清空回收站。
 函数原型如下:
 SHSTDAPI SHEmptyRecycleBin(
        HWND hwnd,
         LPCTSTR pszRootPath,
         DWORD dwFlags
    );
 相关参数说明请查阅MSDN。
79.对INI文件的操作
 我们可以通过CreateFile函数创建一个INI文件,然后利用WrietProfileString函数
 向INI文件写入数据。
80.如何删除文件目录
 利用API函数RemoveDirectory可以实现删除文件夹的功能。
 注:RemoveDirectory函数只能删除空文件夹,因此在调用前需要删除目录下的文件。
 如下示例代码:
 CString str;
 m_path.GetWindowText(str);
 DelFolder(str);//先删除目录下的文件
 //目录为空时删除目录
 if(RemoveDirectory(str))
 {
  MessageBox("删除成功!");
  return;
 }
 void DelFolder(CString path)
 {
  CFileFind file;
  if(path.Right(1) != "//")
   path +="//*.*";
  BOOL bf;
  bf = file.FindFile(path);
  while(bf)
  {
   bf = file.FindNextFile();
   //是文件时直接删除
   if (!file.IsDots() && !file.IsDirectory())
    DeleteFile(file.GetFilePath());
   else if (file.IsDots())
    continue;
   else if (file.IsDirectory())
   {
    path = file.GetFilePath();
    //是目录时,继续递归调用函数删除该目录下的文件
    DelFolder(path);
    //目录为空后删除目录
    RemoveDirectory(path);
   }
  }
 }

 

你可能感兴趣的:(api,shell,null,Path,vc++,winapi)