简便播放器
StdAfx.h
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <commdlg.h>
#include <string.h>
#include <stdlib.h>
#include <direct.h>
#include <digitalv.h>
#include <vfw.h>
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
resource.h
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
#define AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
#include <windows.h>
#include <windowsx.h>
#include <mmsystem.h>
#include <commdlg.h>
#include <string.h>
#include <stdlib.h>
#include <direct.h>
#include <digitalv.h>
#include <vfw.h>
// TODO: reference additional headers your program requires here
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__A9DB83DB_A9FD_11D0_BFD1_444553540000__INCLUDED_)
简便播放器.cpp
// 简便播放器.cpp : Defines the entry point for the application.
///
/*
简便播放器.cpp
目的:简便播放器(源代码文件)
创建: (Calvin)
日期:2003.06
版本:1.0
*/
///
#include "stdafx.h"
#include "resource.h"
//全局实例句柄
HINSTANCE ghInst;
#define MCIPLAY_APP_CLASS "MCIPlay_App"
#define MCIPLAY_DOC_CLASS MCIWND_WINDOW_CLASS
//父窗口句柄
HWND ghwndApp;
//MDI client 窗口句柄 , MCI播放窗口创建后附着其上
HWND ghwndMdi;
//MCI窗口句柄
HWND hwndMCINew;
/* Open flag: TRUE == movie open, FALSE = none */
//BOOL fMovieOpen = FALSE;
/* window handle of the movie */
//HWND hwndMovie;
LRESULT CALLBACK AppWndProc(HWND, UINT, WPARAM, LPARAM);
///
/*
关于C语言中的静态函数:
# 静态函数允许其他源文件建立并使用同名的函数,而不相互冲突
# 声明为静态的函数不能被其他源文件所调用,因为它的名字不能得到
*/
///
static void mdiFilterSendMessage(HWND, UINT, WPARAM, LPARAM);
static LRESULT mdiSendMessage(HWND hwndMdi, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
static HWND mdiCreateClient(HWND, HMENU);
static void MCI_OnCommand(HWND, int, HWND, UINT);
static HWND mdiCreateDoc(LPSTR, LPSTR, LPARAM);
static void MCI_OnSize(HWND, UINT, int, int);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
ghInst = hInstance;
WNDCLASS cls;
cls.hCursor = LoadCursor(NULL,IDC_ARROW);
cls.hIcon = LoadIcon(hInstance,"ICON1");
cls.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
cls.lpszClassName = MCIPLAY_APP_CLASS;
cls.hbrBackground = (HBRUSH)(COLOR_APPWORKSPACE+1);
cls.hInstance = ghInst;
cls.style = 0;
cls.lpfnWndProc = (WNDPROC)AppWndProc;
cls.cbClsExtra = 0;
cls.cbWndExtra = 0;
if (!RegisterClass(&cls))
return 0;
// !!! Not using MCIWndCreate, so we must init ourselves
if (!MCIWndRegisterClass())
return FALSE;
ghwndApp = CreateWindow(
MCIPLAY_APP_CLASS,
"简便播放器",
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
(HWND)NULL, //no parent
(HMENU)NULL, //use class menu
hInstance, //handle to window instance
(LPSTR)NULL); //no params to pass on
//Make window visible according to the way the app is activated
ShowWindow(ghwndApp,nCmdShow);
//从消息事件队列里轮询
for (;;)
{
if (PeekMessage(&msg, NULL, 0, 0,PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
if(!TranslateMDISysAccel(ghwndMdi, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
// idle time here, DONT BE A PIG!
WaitMessage();
}
}
return msg.wParam ;
}
LRESULT CALLBACK AppWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_CREATE:
//
ghwndMdi =
mdiCreateClient(hwnd, GetSubMenu(GetMenu(hwnd), GetMenuItemCount(GetMenu(hwnd))-1));
break;
case WM_COMMAND:
HANDLE_WM_COMMAND(hwnd, wParam, lParam, MCI_OnCommand);
break;
case WM_PALETTECHANGED:
mdiSendMessage(ghwndMdi, (HWND)-1, msg, wParam, lParam);
break;
case WM_QUERYNEWPALETTE:
return mdiSendMessage(ghwndMdi, NULL, msg, wParam, lParam);
break;
//case WM_INITMENUPOPUP:
//HANDLE_WM_INITMENUPOPUP(hwnd, wParam, lParam, MCI_OnInitMenuPopup);
// break;
case WM_SIZE:
HANDLE_WM_SIZE(hwnd, wParam, lParam, MCI_OnSize);
break;
case WM_DESTROY:
PostQuitMessage(0);
return (0);
}
return DefFrameProc(hwnd,ghwndMdi,msg,wParam,lParam);
}
static LRESULT mdiSendMessage(HWND hwndMdi, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (hwnd == (HWND)-1)
{
for (hwnd = GetWindow(hwndMdi, GW_CHILD); hwnd; hwnd = GetWindow(hwnd, GW_HWNDNEXT))
SendMessage(hwnd, msg, wParam, lParam);
return 0L;
}
else
{
if (hwnd == NULL)
hwnd = FORWARD_WM_MDIGETACTIVE(hwndMdi, SendMessage);
if (hwnd)
return SendMessage(hwnd, msg, wParam, lParam);
}
}
static void MCI_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
HWND hwndNew;
HWND hwndMovie = FORWARD_WM_MDIGETACTIVE(ghwndMdi, SendMessage);
BOOL bGotHelp;
switch(id)
{
case IDC_EXIT:
PostMessage(hwnd,WM_CLOSE,0,0L);
break;
case MENU_OPEN:
{
OPENFILENAME ofn;
char szFileName[MAX_PATH];
//char szFileTitle[MAX_PATH];
/* prompt user for file to open */
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hwnd;
ofn.hInstance = NULL;
ofn.lpstrFilter = "Videofiles(*.avi,*.dat,*.mpeg,*.mpg)/0*.avi;*.dat;*.mpeg;*.mpg/0/0";
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 0;
*szFileName = '/0';
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = "Open";
ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.lCustData = 0;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
if (GetOpenFileName(&ofn))
if (hwndNew = mdiCreateDoc(MCIPLAY_DOC_CLASS, 0, (LPARAM)(LPSTR)szFileName))
SetFocus(hwndNew);
}
break;
case IDC_ABOUTVEDIO:
bGotHelp = WinHelp(hwnd, "GENERIC.HLP", HELP_CONTENTS,(DWORD)0);
if (!bGotHelp)
{
MessageBox (GetFocus(), "简便播放器.HLP",
"简便播放器.HLP", MB_OK|MB_ICONHAND);
}
break;
default:
FORWARD_WM_COMMAND(NULL, id, hwndCtl, codeNotify, mdiFilterSendMessage);
break;
}
return;
}
static HWND mdiCreateClient(HWND hwndP, HMENU hmenuWindow)
{
CLIENTCREATESTRUCT ccs;
ccs.hWindowMenu = hmenuWindow;
ccs.idFirstChild = 100;
return CreateWindow(
"MDICLIENT",
NULL,
WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE,
0,
0,
0,
0,
hwndP,
0,
ghInst,
(LPVOID)&ccs);
}
static HWND mdiCreateDoc(LPSTR szClass, LPSTR szTitle, LPARAM l)
{
MDICREATESTRUCT mdics;
mdics.szClass = szClass;
mdics.szTitle = szTitle;
mdics.hOwner = ghInst;
mdics.x = CW_USEDEFAULT;
mdics.y = 0;
mdics.cx = CW_USEDEFAULT;
mdics.cy = 0;
mdics.style = WS_CLIPCHILDREN | WS_CLIPSIBLINGS | MCIWNDF_SHOWALL;
mdics.lParam = l;
return FORWARD_WM_MDICREATE(ghwndMdi, (LPMDICREATESTRUCT)&mdics, SendMessage);
}
static void mdiFilterSendMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
mdiSendMessage(ghwndMdi, hwnd, msg, wParam, lParam);
}
static void MCI_OnSize(HWND hwnd, UINT state, int cx, int cy)
{
MoveWindow(ghwndMdi,0,0,cx,cy,TRUE);
return;
}
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/
#undef APSTUDIO_READONLY_SYMBOLS
/
// Chinese (P.R.C.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32
/
//
// Dialog
//
IDD_DIALOG_VEDIOPLAY DIALOGEX 0, 0, 397, 240
STYLE DS_MODALFRAME | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CLIENTEDGE
CAPTION "简便媒体播放器 测试版本1"
FONT 10, "System", 0, 0, 0x1
BEGIN
PUSHBUTTON "打开文件",IDC_BUTTON_OPEN,343,7,47,13
PUSHBUTTON "退出",IDC_BUTTON_EXIT,343,56,47,13
END
/
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_DIALOG_VEDIOPLAY, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 390
TOPMARGIN, 7
BOTTOMMARGIN, 233
END
END
#endif // APSTUDIO_INVOKED
#ifdef APSTUDIO_INVOKED
/
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h/0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""/r/n"
"/0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"/r/n"
"/0"
END
#endif // APSTUDIO_INVOKED
/
//
// Menu
//
IDR_MENU1 MENU DISCARDABLE
BEGIN
POPUP "File"
BEGIN
MENUITEM SEPARATOR
MENUITEM "退出", IDC_EXIT
END
POPUP "视频"
BEGIN
MENUITEM "打开文件", MENU_OPEN
END
POPUP "帮助"
BEGIN
MENUITEM "关于本程序的帮助", IDC_ABOUTVEDIO
MENUITEM SEPARATOR
END
END
/
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDI_ICON1 ICON DISCARDABLE "ICON1.ico"
#endif // Chinese (P.R.C.) resources
/
#ifndef APSTUDIO_INVOKED
/
//
// Generated from the TEXTINCLUDE 3 resource.
//
/
#endif // not APSTUDIO_INVOKED