以前组装的一个播放器

来源:互联网 发布:oa软件在线试用 编辑:程序博客网 时间:2024/05/16 12:25

简便播放器

 

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

 

原创粉丝点击