您的位置:首页 > 产品设计 > UI/UE

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: