22.1 Windows和多媒体
22.1.1 Windows中支持多媒体功能的API
(1)底层接口:如波形音频输入、输出函数waveIn和waveOut前缀开头
MIDI输出设备midiOut函数
(2)高层接口:
①以mci为前缀的7个函数。mci本身有两种,一种是向MCI发送消息。一种是向MCI发送文本字符串。
②MessageBeep和PlaySound等函数。
22.1.2 TESTMCI程序
效果图
/*--------------------------------------------------------- TESTMCI.C —— MCI Command String Tester (c)Charles Petzold,1998 ---------------------------------------------------------*/ #include <Windows.h> #include "resource.h" #pragma comment(lib,"WINMM.lib") //须用到WINMM.DLL的导入表 #define ID_TIMER 1 BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM); TCHAR szAppName[] = TEXT("TestMci"); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { if (-1==DialogBox(hInstance,szAppName,NULL,DlgProc)) { MessageBox(NULL, TEXT("This program requires Windows NT!"), szAppName, MB_ICONERROR); } return 0; } BOOL CALLBACK DlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hwndEdit; int iCharBeg, iCharEnd,iLineBeg,iLineEnd,iLine,iLength,iChar; TCHAR szCommand[1024], szReturn[1024], szError[1024],szBuffer[24]; MCIERROR error; RECT rect; switch (message) { case WM_INITDIALOG: //将窗口置于屏幕中心 GetWindowRect(hwnd, &rect); SetWindowPos(hwnd, NULL, (GetSystemMetrics(SM_CXSCREEN) - rect.right + rect.left) / 2, (GetSystemMetrics(SM_CYSCREEN) - rect.bottom + rect.top) / 2, 0, 0, SWP_NOZORDER | SWP_NOSIZE); hwndEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT); SetFocus(hwndEdit); return FALSE; //手动设置焦点,应返回FALSE。否则会设在第1个拥有WS_TABSTOP控件上 case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: //计算文本框中被选中的开始和结束的行数 SendMessage(hwndEdit, EM_GETSEL, (WPARAM)&iCharBeg, (LPARAM)&iCharEnd);//开始位置和结束位置 iLineBeg = SendMessage(hwndEdit, EM_LINEFROMCHAR, iCharBeg, 0); iLineEnd = SendMessage(hwndEdit, EM_LINEFROMCHAR, iCharEnd, 0); //遍历所有选中的行(如果没有选中的,则默认会读取最后一行文本) for (iLine = iLineBeg; iLine<=iLineEnd; iLine++) { //每次循环获取第iLine行文本,并在最末尾加上 结束,如果是空行,则跳过。 //缓冲区第1个字为缓冲区字符个数(含 ),EM_GETLINE消息要求的 *(WORD*)szCommand = sizeof(szCommand) / sizeof(TCHAR); iLength = SendMessage(hwndEdit, EM_GETLINE, iLine, (LPARAM)szCommand); szCommand[iLength] = '