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);
}
}
}