SOL9 Sample: MediaControl
|
1 Screenshot
2 Source code
/*
* MediaControl.cpp
* Copyright (c) 2015 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
*/
// SOL++2000
// 2008/09/15 Modified a parameter of open method of MediaControlView.
// controller.open(name, MCIWNDOPENF_NEW);
// -> controller.open(name, MCIWNDF_SHOWALL|MCIWNDF_NOTIFYALL);
// 2008/09/15 Modified to use SOL::FileDialog to open WMV files.
// 2008/09/16 Modified to be able to select *.wmv and *.wma in FileDialog
// ar.set(XmNfilter, "Windows Media(*.wmv *.wma)\0 *.wmv;*.wma\0");
// 2008/09/16 Modified to use restoreFileFolder/saveFileFolder in open method.
#include <sol\ApplicationView.h>
#include <sol\DesktopWindow.h>
#include <sol\Profile.h>
#include <sol\Stdio.h>
#include <sol\MediaControlView.h>
#include <sol\FileDialog.h>
#include "resource.h"
namespace SOL {
class MediaControl :public ApplicationView {
private:
MediaControlView controller;
FileDialog fileDialog;
public:
/**
* Constructor
*/
MediaControl(Application& applet, const TCHAR* name, Args& args)
:ApplicationView(applet, name, args)
{
Args ar;
ar.reset();
ar.set(XmNstyle, WS_BORDER|MCIWNDF_SHOWALL |
MCIWNDF_NOTIFYSIZE|
MCIWNDF_NOTIFYPOS);
controller.create(this, NULL, ar);
ar.reset();
ar.set(XmNfilter, _T("Windows Media(*.wmv *.wma)\0 *.wmv;*.wma\0"));
fileDialog.create(this, _T("FileSelection"), ar);
addCallback(XmNmenuCallback, IDM_OPEN, this,
(Callback)&MediaControl::open, NULL);
addCallback(XmNmenuCallback, IDM_EXIT, this,
(Callback)&MediaControl::exit, NULL);
addCallback(XmNmenuCallback, IDM_VERSION, this,
(Callback)&MediaControl::version, NULL);
addEventHandler(WM_CLOSE, this,
(Handler)&MediaControl::close, NULL);
addEventHandler(WM_WINDOWPOSCHANGED , this,
(Handler)&MediaControl::posChanged, NULL);
addEventHandler(MCIWNDM_NOTIFYPOS,this,
(Handler)&MediaControl::mciNotify, NULL);
addEventHandler(MCIWNDM_NOTIFYSIZE,this,
(Handler)&MediaControl::mciNotify, NULL);
restorePlacement();
}
private:
void version(Action& action)
{
showMessageDialog(_T("Version"),
_T("MediaControl Version 1.0.0.2\r\nCopyright(C) 2008-2009 Antillia.com"),
MB_OK|MB_ICONINFORMATION);
}
private:
long mciNotify(Event& ev)
{
RECT r;
controller.getWindowRect(&r);
HWND hwnd = getWindow();
AdjustWindowRectEx(&r, GetWindowLong(hwnd, GWL_STYLE),
TRUE, GetWindowLong(hwnd, GWL_EXSTYLE));
move(r.left, r.top,
r.right - r.left, r.bottom - r.top, TRUE);
controller.update();
return 0L;
}
private:
long posChanged(Event& ev)
{
RECT r;
getClientRect(&r);
int w = r.right- r.left;
int h = r.bottom - r.top;
controller.move(0, 0, w, h);
controller.invalidate((RECT*)NULL);
update();
controller.update();
return 0L;
}
private:
/**
* Callback for [Open] menu.
*/
void open(Action& action) {
Args ar;
TCHAR dir[MAX_PATH];
memset(dir, (TCHAR)0, CountOf(dir));
//Restore previously select folder from a registry(profile of
//this application) for fileDialog
if (restoreFileFolder(dir, CountOf(dir))) {
ar.set(XmNdirectory, dir);
fileDialog.setValues(ar);
}
if(fileDialog.open()){
TCHAR title[MAX_PATH];
TCHAR* filename = fileDialog.getFileName();
TCHAR* ftitle = fileDialog.getFileTitle();
saveFileFolder(filename);
controller.open(filename, 0);
controller.play();
_stprintf_s(title, CountOf(title), _T("%s - MediaViewer"), filename);
setText(title);
}
}
private:
long close(Event& event)
{
savePlacement();
return defaultProc(event);
}
};
}
//////////////////////////////////
// MediaControl Main
void Main(int argc, TCHAR** argv)
{
ModuleFileName module(argv[0]);
const TCHAR* name = module.getFileName();
try {
Application applet(name, argc, argv);
Args args;
MediaControl controller(applet, name, args);
controller.realize();
applet.run();
} catch (Exception& ex) {
caught(ex);
} catch (...) {
caught(UnknownException());
}
}
Last modified: 1 Feb 2017
Copyright (c) 2017 Antillia.com ALL RIGHTS RESERVED.