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;
}
点击打开链接参考播放器实例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;
}
相关文章推荐
- GUI 剖析之播放器 实例2) 全功能播放器
- GUI 剖析之 多种方法解决多个实例运行问题
- Android实例剖析笔记(八)
- 数据库设计三大范式应用实例剖析
- 线上多服务管理工具实例剖析
- 数据库设计三大范式应用实例剖析
- GUI 中监听 文本框实时改变的实例
- 隐马尔可夫模型求解三大问题实例剖析
- 数据库设计三大范式应用实例剖析
- Windows GDI和GDI+编程实例剖析
- 数据库设计三大范式应用实例剖析
- 数据库设计三大范式应用实例剖析
- 数据库设计三大范式应用实例剖析
- 数据库设计三大范式应用实例剖析
- RPC远程过程调用实例剖析
- 数据库设计三大范式应用实例剖析
- 数据库设计三大范式应用实例剖析
- 基于wxpython实现的windows GUI程序实例
- 数据库设计三大范式应用实例剖析
- [原创]WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[第2篇]