176 Lập trình Windows với MFC Microsoft Visual C++ 6.0 Lê Ngọc Thạn h lntmail@yahoo.com2 Giả sử cần thực hiện ứng dụng sau:
12.6 LẬP TRÌNH MULTIMEDIA VỚI MCI:
MCI (Media Control Interface) cung cấp bộ lệnh cơ bản có tính thích nghi cao với nhiều thiết bị media trong việc thực hiện các nội dung multimedia.
Mỗi thiết bị media sử dụng cho việc thực hiện nội dung multimedia được MCI quản lý thông qua cửa sổ giao diện MCI thuộc lớp MCIWnd. Đây là lớp cửa sổ do MCI đăng ký trước nhằm phục vụ cho mục đích này.
180 Lập trình Windows với MFC - Microsoft Visual C++ 6.0 - Lê Ngọc Thạnh - lntmail@yahoo.comSau đây là các hàm MCI sử dụng phổ biến (Vfw.h): Sau đây là các hàm MCI sử dụng phổ biến (Vfw.h):
HWND MCIWndCreate (
HWND hwndParent, // Handle cửa sổ cha của cửa sổ MCI HINSTANCE hInstance, // Handle của ứng dụng
DWORD dwStyle, // Dạng cửa sổ giao diện MCI LPSTR szFile // Đường dẫn, tên tập tin media.
); Mở thiết bị media và sử dụng nội dung multimedia trong tập tin tương ứng. Hàm trả về con trỏ cửa sổ MCI quản lý thiết bị được mở.
Thông số dwStyle của cửa sổ MCI được kết hợp từ các giá trị sau: MCIWNDF_SHOWALL : Hiển thị các mục của cửa sổ. MCIWNDF_NOMENU : Không hiển thị nút chọn menu. MCIWNDF_NOPLAYBAR : Không hiển thị progressbar. LONG MCIWndOpen ( // Trả về giá trị 0 nếu thành công.
HWND hwnd, // Handle cửa sổ MCI
LPSTR szFile // Đường dẫn, tên tập tin media. DWORD dwStyle = 0
); Mở nội dung multimedia mới cho thiết bị media quản lý bởi hwnd. LONG MCIWndClose( HWND hwnd ); Đóng nội dung multimedia. LONG MCIWndPlay( HWND hwnd ); Thực hiện.
LONG MCIWndStop( HWND hwnd ); Ngừng thực hiện. LONG MCIWndPause( HWND hwnd ); Tạm ngừng. LONG MCIWndResume( HWND hwnd ); Tiếp tục.
VOID MCIWndDestroy( HWND hwnd ); Đóng thiết bị media.
2 Giả sử thiết kế ứng dụng cho phép chọn tập tin multimedia; mục Play thực hiện nội dung tập tin, mục Stop ngừng thực hiện.
Các bước tiến hành như sau:
Dùng MFC Wizard tạo dự án MCI với giao diện chính là dialog. Khai báo sử dụng thư viện MCI trong tập tin STDAFX.H:
#include <Vfw.h>
#pragma comment (lib, "Vfw32.lib") // MCI library Trong lớp dialog giao diện chính: CMCIDlg
Một số vấn đề trong Windows 181
- Mở dialog resource, cài các control sau:
- Hộp nhập đường dẫn, tên tập tin Edit IDC_FILE
- Nút lệnh thực hiện Play Button IDC_PLAY - Nút lệnh thực hiện Stop Button IDC_STOP - Bổ sung thuộc tính protected m_mciWnd kiểu HWND dùng quản lý
thiết bị media được sử dụng.
- Hành OnInitDialog khởi động thiết bị media: BOOL CMCIDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetDlgItemText(IDC_FILE, "HappyNewYear.rmi"); m_mciWnd = MCIWndCreate ( this->GetSafeHwnd(),
AfxGetInstanceHandle(),
/*invisible*/ ~WS_VISIBLE, NULL ); return TRUE;
}
- Hành vi OnPlay ứng với nút IDC_PLAY thực hiện nội dung media: void CMCIDlg::OnPlay()
{
char fName[1024]; // Lấy tên tập tin multimedia GetDlgItemText(IDC_FILE, fName, 1023);
if ( MCIWndOpen( m_mciWnd, fName, 0 ) == 0 ) { MCIWndPlay( m_mciWnd );
} }
- Hành vi OnStop ngừng thực hiện: void CMCIDlg::OnStop() {
MCIWndStop( m_mciWnd ); }
Biên dịch và chạy thử ứng dụng.