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

GUI 剖析之播放器实例1

2012-11-20 17:38 309 查看
//下面给出一个播放器实例的全部代码,纯API+C语言,简单易懂,不过还有一些小BUG...希望大家理解...

点击打开链接参考播放器实例2

#include "stdafx.h"

#include "播放器项目.h"

#include <ShlObj.h>

#include <MMSystem.h>

#include <Vfw.h>

#include "resource.h"

#pragma comment(lib, "winmm.lib")

#pragma comment(lib, "Vfw32.lib")

// 全局变量:

HINSTANCE hInst; // 当前实例

// 主窗口类名

// 此代码模块中包含的函数的前向声明:

INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,

HINSTANCE hPrevInstance,

LPTSTR lpCmdLine,

int nCmdShow)

{

DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUTBOX), NULL, About);

return 0;

}

INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

UNREFERENCED_PARAMETER(lParam);

static bool bplay=false;

static TCHAR szBuff[256]={0};

static HWND hwnd;

static int gIndex=-1;

static int nIndex=-1;

static bool pa=false;

switch (message)

{

case WM_INITDIALOG:

{

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_LIST1:

{

if (LBN_DBLCLK==HIWORD(wParam))

{

MCIWndDestroy(hwnd);

UpdateWindow(hDlg);

int index=SendDlgItemMessage(hDlg,IDC_LIST1,LB_GETCURSEL,0,0);

gIndex=index;

TCHAR buff[255];

SendDlgItemMessage(hDlg,IDC_LIST1,LB_GETTEXT,index,(LPARAM)buff);

HWND hStatic=GetDlgItem(hDlg,IDC_STATIC);

HINSTANCE hInstance=(HINSTANCE)GetWindowLong(hStatic,GWL_HINSTANCE);

hwnd= MCIWndCreate(hStatic,hInstance,WS_CHILD|WS_BORDER|WS_VISIBLE

, buff);

lstrcpy(szBuff,buff);

MCIWndPlay(hwnd);

SetDlgItemText(hDlg,IDC_NEW,buff);

}

if (LBN_SELCHANGE==HIWORD(wParam))

{

int index=SendDlgItemMessage(hDlg,IDC_LIST1,LB_GETCURSEL,0,0);

gIndex=index;

TCHAR buff[255];

SendDlgItemMessage(hDlg,IDC_LIST1,LB_GETTEXT,index,(LPARAM)buff);

lstrcpy(szBuff,buff);

}

break;

}

case IDC_PLAY:

{

WCHAR buff[256]={0};

MCIWndDestroy(hwnd);

UpdateWindow(hDlg);

if (CompareString(LOCALE_CUSTOM_DEFAULT,NORM_IGNORECASE,szBuff,sizeof(szBuff)/sizeof(TCHAR),buff,sizeof(buff)/sizeof(WCHAR))!=2)

{

HWND hStatic=GetDlgItem(hDlg,IDC_STATIC);

HINSTANCE hInstance=(HINSTANCE)GetWindowLong(hStatic,GWL_HINSTANCE);

hwnd= MCIWndCreate(hStatic,hInstance,WS_CHILD|WS_BORDER|WS_VISIBLE

, szBuff);

MCIWndPlay(hwnd);

SetDlgItemText(hDlg,IDC_NEW,buff);

}

else

{

MessageBox(hDlg,TEXT("请先选择音乐"),TEXT(""),MB_ICONINFORMATION|MB_OK);

}

break;

}

case IDC_PAUSE:

{

pa=!pa;

if (pa==false)

{

MCIWndPause(hwnd);

SetDlgItemText(hDlg,IDC_PAUSE,TEXT("继续"));

}

if (pa==true)

{

MCIWndResume(hwnd) ;

SetDlgItemText(hDlg,IDC_PAUSE,TEXT("暂停"));

}

break;

}

case IDC_BREAK:

{

MCIWndStop(hwnd) ;

break;

}

case IDC_LAST:

{

if (gIndex==-1)

{

MessageBox(hDlg,TEXT("请先选择音乐!"),TEXT(""),MB_ICONINFORMATION|MB_OK);

break;

}

if (gIndex==0)

{

MessageBox(hDlg,TEXT("已经是第一首了!"),TEXT(""),MB_ICONINFORMATION|MB_OK);

break;

}

if (gIndex>0)

{

MCIWndDestroy(hwnd);

UpdateWindow(hDlg);

gIndex--;

TCHAR buff[255];

SendDlgItemMessage(hDlg,IDC_LIST1,LB_GETTEXT,gIndex,(LPARAM)buff);

HWND hStatic=GetDlgItem(hDlg,IDC_STATIC);

HINSTANCE hInstance=(HINSTANCE)GetWindowLong(hStatic,GWL_HINSTANCE);

hwnd= MCIWndCreate(hStatic,hInstance,WS_CHILD|WS_BORDER|WS_VISIBLE

, buff);

MCIWndPlay(hwnd);

SetDlgItemText(hDlg,IDC_NEW,buff);

}

break;

}

case IDC_NEXT:

{

if (gIndex==-1)

{

MessageBox(hDlg,TEXT("请先选择音乐!"),TEXT(""),MB_ICONINFORMATION|MB_OK);

break;

}

if (gIndex==nIndex)

{

MessageBox(hDlg,TEXT("已经是最后一首了!"),TEXT(""),MB_ICONINFORMATION|MB_OK);

break;

}

if (gIndex<nIndex)

{

MCIWndDestroy(hwnd);

UpdateWindow(hDlg);

gIndex++;

TCHAR buff[255];

SendDlgItemMessage(hDlg,IDC_LIST1,LB_GETTEXT,gIndex,(LPARAM)buff);

HWND hStatic=GetDlgItem(hDlg,IDC_STATIC);

HINSTANCE hInstance=(HINSTANCE)GetWindowLong(hStatic,GWL_HINSTANCE);

hwnd= MCIWndCreate(hStatic,hInstance,WS_CHILD|WS_BORDER|WS_VISIBLE

, buff);

MCIWndPlay(hwnd);

SetDlgItemText(hDlg,IDC_NEW,buff);

}

break;

}

case IDC_ADD:

{

TCHAR szFile[256] = {0};

OPENFILENAME ofn;

memset(&ofn,0,sizeof(OPENFILENAME));

TCHAR szFilter[] = TEXT("ALL files\0*.*\0Mp3files\0*.mp3\0wma files\0*.wma\0");

ofn.lStructSize = sizeof(OPENFILENAME);

ofn.hwndOwner = hDlg;

ofn.lpstrFilter = szFilter;

ofn.nMaxFileTitle = MAX_PATH;

ofn.nMaxFile = MAX_PATH;

ofn.lpstrFile = szFile;

ofn.Flags = OFN_ALLOWMULTISELECT|OFN_EXPLORER|OFN_FILEMUSTEXIST;

if (GetOpenFileName(&ofn))

{

nIndex++;

SendDlgItemMessage(hDlg,IDC_LIST1,LB_ADDSTRING,0,(LPARAM)szFile);

}

break;

}

case IDC_DELETE:

{

if (nIndex==-1)

{

MessageBox(hDlg,TEXT("曲目已经为空!"),TEXT(""),MB_ICONINFORMATION|MB_OK);

break;

}

SendDlgItemMessage(hDlg,IDC_LIST1,LB_DELETESTRING,gIndex,(LPARAM)szBuff);

MCIWndDestroy(hwnd);

break;

}

case IDC_EMPTY:

{

if (nIndex==-1)

{

MessageBox(hDlg,TEXT("曲目已经为空!"),TEXT(""),MB_ICONINFORMATION|MB_OK);

break;

}

SendDlgItemMessage(hDlg,IDC_LIST1,LB_RESETCONTENT,0,0);

MCIWndDestroy(hwnd);

break;

}

case IDC_ABOUT:

{

MessageBox(hDlg,TEXT("此播放器是本人学习测试版,\n如有BUG还请指出,谢谢指教,\nQQ:2538698032 \n版权归使用者所有\n采用MCIWndCreate类制作(不是MFC),视频只支持MP4、3gp、avi。"),TEXT(""),MB_ICONINFORMATION|MB_OK);

break;

}

default:break;

}

break;

}

}

return (INT_PTR)FALSE;

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