GUI 剖析之播放器 实例2) 全功能播放器
2012-11-21 20:37
316 查看
// 全功能播放器.cpp : 定义应用程序的入口点。
//本播放器采用MciSendString接口实现,还有一些功能没有实现,读者可参考 GUI 剖析之播放器
实例1)代码,望见谅
点击打开链接参考播放器实例3
#include "stdafx.h"
#include "全功能播放器.h"
#include "resource.h"
#include <ShellAPI.h>
#include <string.h>
#include "CommDlg.h "
#include "mmsystem.h"
#include "DIGITALV.H"
#define MAX_LOADSTRING 100
#define MCI_ERROR 0xFFFFFFFF
// 全局变量:
HWND hVideoWnd;
BOOL bAVI;
UINT uDeviceID;
MCIDEVICEID m_mci_DID=MCI_ERROR;
DWORD m_dwCallBack=0;//MM_MCINOTIFY
#define BUFFER_SIZE 256
void aviVideoFileOpen(HWND hWnd,HWND hDlg);
DWORD GetVolume();
MCIERROR AddVolume(int dwVol);
MCIERROR SetVolume(DWORD dwVol);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK Set(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此放置代码。
DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), NULL, About);
return 0;
}
// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
HDC hdc;
PAINTSTRUCT ps;
static BOOL bpaused;
static int dwVol=30;
switch (message)
{
case WM_ERASEBKGND:
{
return 0;
}
case WM_PAINT:
{
HWND hPlay=GetDlgItem(hDlg,IDC_STATIC);
RECT rect;
GetClientRect(hPlay,&rect);
hdc=BeginPaint(hPlay,&ps);
HDC hMemDC=CreateCompatibleDC(hdc);
HBITMAP hMemBm=CreateCompatibleBitmap(hdc,rect.right,rect.bottom);
SelectObject(hMemDC,hMemBm);
HBRUSH mybrush=(HBRUSH)CreateSolidBrush(RGB(0,0,0,255));
FillRect(hMemDC,&rect,mybrush);
HFONT hFont;;
hFont=CreateFont(23,23,0,0,
FW_THIN,
false,
false,
false,
GB2312_CHARSET,
OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY,
FF_MODERN,
L"隶书");
SelectObject(hMemDC,hFont);
SetTextColor(hMemDC,RGB(255,0,0));
SetBkMode(hMemDC,TRANSPARENT);
DrawText(hMemDC,L"天策版视频播放器(1.1版)[可以播放MPEG,AVI等格式文件] 郑金玮",-1,&rect,DT_WORDBREAK);
BitBlt(hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY);
DeleteDC(hMemDC);
DeleteObject(hMemBm);
EndPaint(hPlay,&ps);
break;
}
case WM_INITDIALOG:
{
SetWindowText(hDlg,TEXT("天策版媒体播放器"));
SetVolume(50);
return (INT_PTR)TRUE;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
switch(LOWORD(wParam))
{
case IDC_PLAY://播放
{
HWND hPlay=GetDlgItem(hDlg,IDC_STATIC);
mciSendString(L"seek thevideo to start",0,0,0);
if(bAVI)mciSendString(L"play thevideo window",0,0,0);
else mciSendString(L"play thevideo",0,0,0);
break;
}
case IDC_PAUSE://暂停
{
if(!bpaused)
{
mciSendString(L"pause thevideo",0,0,0);
HWND hText=GetDlgItem(hDlg,IDC_PAUSE);
SetWindowText(hText,TEXT("继续播放"));
bpaused=TRUE;
}
else
{
mciSendString(L"resume thevideo",0,0,0);
HWND hText=GetDlgItem(hDlg,IDC_PAUSE);
SetWindowText(hText,TEXT("暂停播放"));
bpaused=FALSE;
}
break;
}
case IDC_BREAK://停止
{
mciSendString(L"stop thevideo",0,0,0);
mciSendString(L"seek thevideo to start",0,0,0);
break;
}
case IDC_NEXT://下一曲目
{
break;
}
case IDC_LAST://上一曲目
{
break;
}
case IDC_ABOUT:
{
MessageBox(hDlg,TEXT("此播放器乃本人学习测试制作,\n功能齐全,可能存在一些bug,希望指正\nQQ:2538698032\n'©';copyright:All Right Reserved"),TEXT("关于"),MB_ICONINFORMATION|MB_OK);
break;
}
case IDC_DELETEITEM://删除选定项
{
break;
}
case IDC_EMPTYLIST://清空列表
{
mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, 0, NULL);
SendDlgItemMessage(hDlg,IDC_LIST1,LB_RESETCONTENT,0,0);
break;
}
case IDC_GETINFO://获取媒体信息
{
MCI_DGV_STATUS_PARMS StatusParam;
StatusParam.dwItem = MCI_WAVE_STATUS_SAMPLESPERSEC;
mciSendCommand(uDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM,(DWORD_PTR)&StatusParam);
DWORD samplerate = StatusParam.dwReturn; //该参数返回采样
StatusParam.dwItem = MCI_WAVE_STATUS_CHANNELS;
mciSendCommand(uDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM,(DWORD_PTR) &StatusParam);
DWORD channelnumber = StatusParam.dwReturn; //该参数返回通道数
WCHAR szBuff[256]={0};
wsprintf(szBuff,TEXT("采样:%d\n通道:%d"),samplerate,channelnumber);
MessageBox(hDlg,szBuff,TEXT(""),MB_OK|MB_ICONINFORMATION);
break;
}
case IDC_KNOW://了解制作人
{
ShellExecute(NULL,L"open",L"http://my.csdn.net/dai_jing",NULL,NULL,SW_SHOW);
break;
}
case IDC_JINGYIN://静音
{
SetVolume(0);
break;
}
case IDC_ZDYL://增大音量
{
if (dwVol<=0)
{
dwVol=-dwVol;
}
AddVolume(dwVol);
break;
}
case IDC_JXYL://减小音量
{
if (dwVol>=0)
{
dwVol=-dwVol;
}
AddVolume(dwVol);
break;
}
case IDC_GXH://个性化
{
break;
}
case IDC_ADDTOLIST:
{
HWND hPlay=GetDlgItem(hDlg,IDC_STATIC);
aviVideoFileOpen(hPlay,hDlg);
break;
}
case IDC_EXIT:
{
PostQuitMessage(0);
break;
}
case IDC_KJ://快进
{
mciSendString(L"stop thevideo",0,0,0);
mciSendString(L"STEP thevideo by 100",0,0,0);
if(bAVI)mciSendString(L"play thevideo window",0,0,0);
else mciSendString(L"play thevideo",0,0,0);
break;
}
case IDC_KT://快退
{
mciSendString(L"stop thevideo",0,0,0);
mciSendString(TEXT("step thevideo reverse by 100"),0,0,0);
if(bAVI)mciSendString(L"play thevideo window",0,0,0);
else mciSendString(L"play thevideo",0,0,0);
break;
}
case IDC_KNOW2://设置
{
HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);
DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG1), hDlg,Set);
break;
}
default:break;
}
}
break;
}
return (INT_PTR)FALSE;
}
void aviVideoFileOpen(HWND hWnd,HWND hDlg)
{
OPENFILENAME ofn;
static WCHAR szFile[BUFFER_SIZE]=L"";
static WCHAR szFileTitle[BUFFER_SIZE];
memset(&ofn,0,sizeof(ofn));
ofn.lStructSize=sizeof(ofn);
ofn.hwndOwner=hWnd;
ofn.lpstrFilter=L"allfiles(*.avi,*.dat,*.mpg,*.mp4,*.3gp,*.mp3,*.wma,*.flv,*.*;)\0*.*;0*.flv;0*.wma;0*.mp3;0*.3gp;0*.mp4;0*.avi;*.dat;*.mpg\0\0";
ofn.nFilterIndex=0;
ofn.lpstrFile=szFile;
ofn.nMaxFile=sizeof(szFile);
ofn.lpstrFileTitle=szFileTitle;
ofn.nMaxFileTitle=sizeof(szFileTitle);
ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_EXPLORER;
if(GetOpenFileName(&ofn))
{
SendDlgItemMessage(hDlg,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)szFile);
mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, 0, NULL);
RECT rect;
MCI_DGV_OPEN_PARMS mciOpen;
MCI_DGV_STATUS_PARMS mciStatus;
memset(&mciOpen,0,sizeof(mciOpen));
mciStatus.dwItem=MCI_DGV_STATUS_HWND;
mciOpen.lpstrAlias=L"thevideo";
lstrcpy(szFile,ofn.lpstrFile);
mciOpen.lpstrElementName=szFile;
mciOpen.lpstrDeviceType=L"cdaudio";
mciOpen.hWndParent=hWnd;
mciOpen.dwCallback=(DWORD)hWnd;
mciOpen.dwStyle=WS_CHILD;
if(mciSendCommand(0,MCI_OPEN,MCI_OPEN_ALIAS|MCI_OPEN_ELEMENT|
MCI_DGV_OPEN_PARENT|MCI_DGV_OPEN_WS,(DWORD)&mciOpen)==0)
{
uDeviceID=mciOpen.wDeviceID;
if(wcsstr(szFile,L".AVI"))bAVI=TRUE;else bAVI=FALSE;
mciSendCommand(uDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mciStatus);
hVideoWnd=(HWND)mciStatus.dwReturn;
GetClientRect(hWnd,&rect);
if(bAVI)mciSendString(L"play thevideo window",0,0,0);
else mciSendString(L"play thevideo ",0,0,0);
MoveWindow(hVideoWnd,rect.left,rect.top,rect.right,rect.bottom,TRUE);
}
MessageBox(hWnd,L"添加成功",L"关于添加",
MB_ICONINFORMATION|MB_OK);
WCHAR szBuff[256]={0};
wsprintf(szBuff,TEXT("正在播放:%s"),szFile);
SetDlgItemText(hDlg,IDC_ZJW,szBuff);
}
}
DWORD GetVolume()
{
if(MCI_ERROR==uDeviceID)
return 0;//Invalid device ID.
MCI_STATUS_PARMS mci_p = {0};
mci_p.dwCallback = m_dwCallBack;
mci_p.dwItem = MCI_DGV_STATUS_VOLUME;
mciSendCommand(
uDeviceID,
MCI_STATUS,
MCI_NOTIFY|MCI_STATUS_ITEM,
(DWORD)&mci_p);
return mci_p.dwReturn;
}
MCIERROR AddVolume(int dwVol)
{
int newVol=(int)GetVolume()+dwVol;
if(newVol<0)
newVol=0;
return SetVolume(newVol);
}
MCIERROR SetVolume(DWORD dwVol)
{
if(MCI_ERROR==uDeviceID)
return MCIERR_INVALID_DEVICE_ID;//Invalid device ID.
MCIERROR mciERR = ERROR_SUCCESS;
MCI_DGV_SETAUDIO_PARMS mci_p = {0};
if(dwVol<0)
dwVol=0;
if(dwVol>1000)
dwVol=1000;
mci_p.dwCallback = m_dwCallBack;
mci_p.dwItem = MCI_DGV_SETAUDIO_VOLUME;
mci_p.dwValue = dwVol;
mciERR = mciSendCommand(
uDeviceID,
MCI_SETAUDIO,
MCI_NOTIFY|MCI_DGV_SETAUDIO_ITEM|MCI_DGV_SETAUDIO_VALUE,
(DWORD)&mci_p);
return mciERR;
}
INT_PTR CALLBACK Set(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
SetWindowText(hDlg,TEXT("播放设置"));
return (INT_PTR)TRUE;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
}
return (INT_PTR)FALSE;
}
//本播放器采用MciSendString接口实现,还有一些功能没有实现,读者可参考 GUI 剖析之播放器
实例1)代码,望见谅
点击打开链接参考播放器实例3
#include "stdafx.h"
#include "全功能播放器.h"
#include "resource.h"
#include <ShellAPI.h>
#include <string.h>
#include "CommDlg.h "
#include "mmsystem.h"
#include "DIGITALV.H"
#define MAX_LOADSTRING 100
#define MCI_ERROR 0xFFFFFFFF
// 全局变量:
HWND hVideoWnd;
BOOL bAVI;
UINT uDeviceID;
MCIDEVICEID m_mci_DID=MCI_ERROR;
DWORD m_dwCallBack=0;//MM_MCINOTIFY
#define BUFFER_SIZE 256
void aviVideoFileOpen(HWND hWnd,HWND hDlg);
DWORD GetVolume();
MCIERROR AddVolume(int dwVol);
MCIERROR SetVolume(DWORD dwVol);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK Set(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此放置代码。
DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), NULL, About);
return 0;
}
// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
HDC hdc;
PAINTSTRUCT ps;
static BOOL bpaused;
static int dwVol=30;
switch (message)
{
case WM_ERASEBKGND:
{
return 0;
}
case WM_PAINT:
{
HWND hPlay=GetDlgItem(hDlg,IDC_STATIC);
RECT rect;
GetClientRect(hPlay,&rect);
hdc=BeginPaint(hPlay,&ps);
HDC hMemDC=CreateCompatibleDC(hdc);
HBITMAP hMemBm=CreateCompatibleBitmap(hdc,rect.right,rect.bottom);
SelectObject(hMemDC,hMemBm);
HBRUSH mybrush=(HBRUSH)CreateSolidBrush(RGB(0,0,0,255));
FillRect(hMemDC,&rect,mybrush);
HFONT hFont;;
hFont=CreateFont(23,23,0,0,
FW_THIN,
false,
false,
false,
GB2312_CHARSET,
OUT_CHARACTER_PRECIS,
CLIP_CHARACTER_PRECIS,
DEFAULT_QUALITY,
FF_MODERN,
L"隶书");
SelectObject(hMemDC,hFont);
SetTextColor(hMemDC,RGB(255,0,0));
SetBkMode(hMemDC,TRANSPARENT);
DrawText(hMemDC,L"天策版视频播放器(1.1版)[可以播放MPEG,AVI等格式文件] 郑金玮",-1,&rect,DT_WORDBREAK);
BitBlt(hdc,0,0,rect.right,rect.bottom,hMemDC,0,0,SRCCOPY);
DeleteDC(hMemDC);
DeleteObject(hMemBm);
EndPaint(hPlay,&ps);
break;
}
case WM_INITDIALOG:
{
SetWindowText(hDlg,TEXT("天策版媒体播放器"));
SetVolume(50);
return (INT_PTR)TRUE;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
switch(LOWORD(wParam))
{
case IDC_PLAY://播放
{
HWND hPlay=GetDlgItem(hDlg,IDC_STATIC);
mciSendString(L"seek thevideo to start",0,0,0);
if(bAVI)mciSendString(L"play thevideo window",0,0,0);
else mciSendString(L"play thevideo",0,0,0);
break;
}
case IDC_PAUSE://暂停
{
if(!bpaused)
{
mciSendString(L"pause thevideo",0,0,0);
HWND hText=GetDlgItem(hDlg,IDC_PAUSE);
SetWindowText(hText,TEXT("继续播放"));
bpaused=TRUE;
}
else
{
mciSendString(L"resume thevideo",0,0,0);
HWND hText=GetDlgItem(hDlg,IDC_PAUSE);
SetWindowText(hText,TEXT("暂停播放"));
bpaused=FALSE;
}
break;
}
case IDC_BREAK://停止
{
mciSendString(L"stop thevideo",0,0,0);
mciSendString(L"seek thevideo to start",0,0,0);
break;
}
case IDC_NEXT://下一曲目
{
break;
}
case IDC_LAST://上一曲目
{
break;
}
case IDC_ABOUT:
{
MessageBox(hDlg,TEXT("此播放器乃本人学习测试制作,\n功能齐全,可能存在一些bug,希望指正\nQQ:2538698032\n'©';copyright:All Right Reserved"),TEXT("关于"),MB_ICONINFORMATION|MB_OK);
break;
}
case IDC_DELETEITEM://删除选定项
{
break;
}
case IDC_EMPTYLIST://清空列表
{
mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, 0, NULL);
SendDlgItemMessage(hDlg,IDC_LIST1,LB_RESETCONTENT,0,0);
break;
}
case IDC_GETINFO://获取媒体信息
{
MCI_DGV_STATUS_PARMS StatusParam;
StatusParam.dwItem = MCI_WAVE_STATUS_SAMPLESPERSEC;
mciSendCommand(uDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM,(DWORD_PTR)&StatusParam);
DWORD samplerate = StatusParam.dwReturn; //该参数返回采样
StatusParam.dwItem = MCI_WAVE_STATUS_CHANNELS;
mciSendCommand(uDeviceID, MCI_STATUS, MCI_WAIT | MCI_STATUS_ITEM,(DWORD_PTR) &StatusParam);
DWORD channelnumber = StatusParam.dwReturn; //该参数返回通道数
WCHAR szBuff[256]={0};
wsprintf(szBuff,TEXT("采样:%d\n通道:%d"),samplerate,channelnumber);
MessageBox(hDlg,szBuff,TEXT(""),MB_OK|MB_ICONINFORMATION);
break;
}
case IDC_KNOW://了解制作人
{
ShellExecute(NULL,L"open",L"http://my.csdn.net/dai_jing",NULL,NULL,SW_SHOW);
break;
}
case IDC_JINGYIN://静音
{
SetVolume(0);
break;
}
case IDC_ZDYL://增大音量
{
if (dwVol<=0)
{
dwVol=-dwVol;
}
AddVolume(dwVol);
break;
}
case IDC_JXYL://减小音量
{
if (dwVol>=0)
{
dwVol=-dwVol;
}
AddVolume(dwVol);
break;
}
case IDC_GXH://个性化
{
break;
}
case IDC_ADDTOLIST:
{
HWND hPlay=GetDlgItem(hDlg,IDC_STATIC);
aviVideoFileOpen(hPlay,hDlg);
break;
}
case IDC_EXIT:
{
PostQuitMessage(0);
break;
}
case IDC_KJ://快进
{
mciSendString(L"stop thevideo",0,0,0);
mciSendString(L"STEP thevideo by 100",0,0,0);
if(bAVI)mciSendString(L"play thevideo window",0,0,0);
else mciSendString(L"play thevideo",0,0,0);
break;
}
case IDC_KT://快退
{
mciSendString(L"stop thevideo",0,0,0);
mciSendString(TEXT("step thevideo reverse by 100"),0,0,0);
if(bAVI)mciSendString(L"play thevideo window",0,0,0);
else mciSendString(L"play thevideo",0,0,0);
break;
}
case IDC_KNOW2://设置
{
HINSTANCE hInst=(HINSTANCE)GetWindowLong(hDlg,GWL_HINSTANCE);
DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG1), hDlg,Set);
break;
}
default:break;
}
}
break;
}
return (INT_PTR)FALSE;
}
void aviVideoFileOpen(HWND hWnd,HWND hDlg)
{
OPENFILENAME ofn;
static WCHAR szFile[BUFFER_SIZE]=L"";
static WCHAR szFileTitle[BUFFER_SIZE];
memset(&ofn,0,sizeof(ofn));
ofn.lStructSize=sizeof(ofn);
ofn.hwndOwner=hWnd;
ofn.lpstrFilter=L"allfiles(*.avi,*.dat,*.mpg,*.mp4,*.3gp,*.mp3,*.wma,*.flv,*.*;)\0*.*;0*.flv;0*.wma;0*.mp3;0*.3gp;0*.mp4;0*.avi;*.dat;*.mpg\0\0";
ofn.nFilterIndex=0;
ofn.lpstrFile=szFile;
ofn.nMaxFile=sizeof(szFile);
ofn.lpstrFileTitle=szFileTitle;
ofn.nMaxFileTitle=sizeof(szFileTitle);
ofn.Flags=OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_EXPLORER;
if(GetOpenFileName(&ofn))
{
SendDlgItemMessage(hDlg,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)szFile);
mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, 0, NULL);
RECT rect;
MCI_DGV_OPEN_PARMS mciOpen;
MCI_DGV_STATUS_PARMS mciStatus;
memset(&mciOpen,0,sizeof(mciOpen));
mciStatus.dwItem=MCI_DGV_STATUS_HWND;
mciOpen.lpstrAlias=L"thevideo";
lstrcpy(szFile,ofn.lpstrFile);
mciOpen.lpstrElementName=szFile;
mciOpen.lpstrDeviceType=L"cdaudio";
mciOpen.hWndParent=hWnd;
mciOpen.dwCallback=(DWORD)hWnd;
mciOpen.dwStyle=WS_CHILD;
if(mciSendCommand(0,MCI_OPEN,MCI_OPEN_ALIAS|MCI_OPEN_ELEMENT|
MCI_DGV_OPEN_PARENT|MCI_DGV_OPEN_WS,(DWORD)&mciOpen)==0)
{
uDeviceID=mciOpen.wDeviceID;
if(wcsstr(szFile,L".AVI"))bAVI=TRUE;else bAVI=FALSE;
mciSendCommand(uDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mciStatus);
hVideoWnd=(HWND)mciStatus.dwReturn;
GetClientRect(hWnd,&rect);
if(bAVI)mciSendString(L"play thevideo window",0,0,0);
else mciSendString(L"play thevideo ",0,0,0);
MoveWindow(hVideoWnd,rect.left,rect.top,rect.right,rect.bottom,TRUE);
}
MessageBox(hWnd,L"添加成功",L"关于添加",
MB_ICONINFORMATION|MB_OK);
WCHAR szBuff[256]={0};
wsprintf(szBuff,TEXT("正在播放:%s"),szFile);
SetDlgItemText(hDlg,IDC_ZJW,szBuff);
}
}
DWORD GetVolume()
{
if(MCI_ERROR==uDeviceID)
return 0;//Invalid device ID.
MCI_STATUS_PARMS mci_p = {0};
mci_p.dwCallback = m_dwCallBack;
mci_p.dwItem = MCI_DGV_STATUS_VOLUME;
mciSendCommand(
uDeviceID,
MCI_STATUS,
MCI_NOTIFY|MCI_STATUS_ITEM,
(DWORD)&mci_p);
return mci_p.dwReturn;
}
MCIERROR AddVolume(int dwVol)
{
int newVol=(int)GetVolume()+dwVol;
if(newVol<0)
newVol=0;
return SetVolume(newVol);
}
MCIERROR SetVolume(DWORD dwVol)
{
if(MCI_ERROR==uDeviceID)
return MCIERR_INVALID_DEVICE_ID;//Invalid device ID.
MCIERROR mciERR = ERROR_SUCCESS;
MCI_DGV_SETAUDIO_PARMS mci_p = {0};
if(dwVol<0)
dwVol=0;
if(dwVol>1000)
dwVol=1000;
mci_p.dwCallback = m_dwCallBack;
mci_p.dwItem = MCI_DGV_SETAUDIO_VOLUME;
mci_p.dwValue = dwVol;
mciERR = mciSendCommand(
uDeviceID,
MCI_SETAUDIO,
MCI_NOTIFY|MCI_DGV_SETAUDIO_ITEM|MCI_DGV_SETAUDIO_VALUE,
(DWORD)&mci_p);
return mciERR;
}
INT_PTR CALLBACK Set(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
{
SetWindowText(hDlg,TEXT("播放设置"));
return (INT_PTR)TRUE;
}
case WM_COMMAND:
{
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
}
return (INT_PTR)FALSE;
}
相关文章推荐
- GUI 剖析之播放器实例1
- GUI 剖析之 多种方法解决多个实例运行问题
- 屏幕蒙层效果、图层对象绝对居中、拖拽图层对象三个功能实例演示剖析
- Android 偷拍功能实现(手机关闭依然拍照)详解及实例代码
- javascript实例--教你实现扑克牌洗牌功能
- 跟王老师学多态(四):综合实例:使用多态完善汽车租赁系统计价功能
- Tab切换组件(选项卡功能)实例代码
- android开发视频播放器------Vitamio 播放页实例
- 测试用例实例--常见功能测试点
- js实现页面打印功能实例代码(附去页眉页脚功能代码)
- Struts2实现单文件的上传功能实例详解及源代码
- mysql分区功能详细介绍,以及实例
- iOS之UI--使用SWRevealViewController实现侧边菜单功能详解实例
- 测试用例实例--常见功能测试点
- WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[上篇]
- javascript省市级联功能实现方法实例详解
- GUI 剖析 之初识main函数 起草人:天策
- 功能完善的Java连接池调用实例
- 数据库设计三大范式应用实例剖析
- PHP正则表达式匹配替换与分割功能实例浅析