195 lines
6.5 KiB
C++
195 lines
6.5 KiB
C++
#include <wave/mainwnd.hpp>
|
|
#include <wave/wave.hpp>
|
|
#include <common/opendlg.hpp>
|
|
#include <common/pen.hpp>
|
|
#include <common/purehdc.hpp>
|
|
|
|
#include <sample/puresmpl.hpp>
|
|
#include <sample/wave.hpp>
|
|
#include <sample/purewave.hpp>
|
|
|
|
char MainWindow::szClassName[]="WaveUtil";
|
|
char MainWindow::szMenuName[]="WaveMenu";
|
|
|
|
MainWindow::MainWindow(HINSTANCE hInstance)
|
|
: mPaintHandler(this,&MainWindow::paintHandler),
|
|
mDestroyHandler(this,&MainWindow::destroyHandler),
|
|
mCommandHandler(this,&MainWindow::commandHandler),
|
|
mKeyDownHandler(this,&MainWindow::keyDownHandler),
|
|
mSizeHandler(this,&MainWindow::sizeHandler),
|
|
mCreateHandler(this,&MainWindow::createHandler),
|
|
mTimerHandler(this,&MainWindow::timerHandler),
|
|
mDrawItemHandler(this,&MainWindow::drawItemHandler),
|
|
mNotifyHandler(this,&MainWindow::notifyHandler),
|
|
mhInstance(hInstance), mOwnerDraw(OwnerDraw::UseInstance)
|
|
{
|
|
insertHandlers();
|
|
registerClass();
|
|
createWindow(WS_EX_ACCEPTFILES|WS_EX_WINDOWEDGE|WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR,szClassName,szClassName,
|
|
WS_VISIBLE|WS_CLIPSIBLINGS|WS_BORDER|WS_CLIPCHILDREN|WS_BORDER|WS_DLGFRAME|WS_SYSMENU|WS_THICKFRAME|WS_GROUP,
|
|
Rect(CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight),
|
|
NULL,NULL,mhInstance,(LPSTR)this);
|
|
show(SW_SHOW);
|
|
update();
|
|
if(!mTrackBar.createTrackBar(*this,Rect(10,12,348,30),TrackBarID,TRUE))::MessageBeep(0);
|
|
mTrackBar.setRange(1,100);
|
|
mTrackBar.setPos(1);
|
|
mTrackBar.insertHandler(TrackBar::NotifyEndTrack,&mNotifyHandler);
|
|
mControl.createControl("BUTTON","",WS_VISIBLE|WS_DISABLED|BS_OWNERDRAW,Rect(10,42,16,16),*this,PlayID);
|
|
}
|
|
|
|
MainWindow::~MainWindow()
|
|
{
|
|
destroy();
|
|
}
|
|
|
|
void MainWindow::insertHandlers(void)
|
|
{
|
|
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
|
|
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
|
insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
|
|
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
insertHandler(VectorHandler::TimerHandler,&mTimerHandler);
|
|
insertHandler(VectorHandler::DrawItemHandler,&mDrawItemHandler);
|
|
}
|
|
|
|
void MainWindow::removeHandlers(void)
|
|
{
|
|
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
|
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
|
|
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
|
removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
|
removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
|
|
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
|
removeHandler(VectorHandler::TimerHandler,&mTimerHandler);
|
|
removeHandler(VectorHandler::DrawItemHandler,&mDrawItemHandler);
|
|
}
|
|
|
|
void MainWindow::registerClass(void)const
|
|
{
|
|
WNDCLASS wndClass;
|
|
|
|
if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return;
|
|
wndClass.style =CS_VREDRAW|CS_HREDRAW||CS_DBLCLKS;
|
|
wndClass.lpfnWndProc =(WNDPROC)Window::WindowWndProc;
|
|
wndClass.cbClsExtra =0;
|
|
wndClass.cbWndExtra =sizeof(MainWindow*);
|
|
wndClass.hInstance =mhInstance;
|
|
wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION);
|
|
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
|
|
wndClass.hbrBackground =(HBRUSH)::GetStockObject(LTGRAY_BRUSH);
|
|
wndClass.lpszMenuName =szMenuName;
|
|
wndClass.lpszClassName =szClassName;
|
|
::RegisterClass(&wndClass);
|
|
assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass));
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
removeHandlers();
|
|
::PostQuitMessage(0);
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData)
|
|
{
|
|
Rect winRect;
|
|
Pen whitePen(RGBColor(255,255,255));
|
|
PaintInformation &paintInformation=(*((PaintInformation*)someCallbackData.lParam()));
|
|
windowRect(winRect);
|
|
((PureDevice&)paintInformation).line(Point(1,5),Point(winRect.right(),5),whitePen);
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::drawItemHandler(CallbackData &someCallbackData)
|
|
{
|
|
if(PlayID==((LPDRAWITEMSTRUCT)someCallbackData.lParam())->CtlID)
|
|
mOwnerDraw.handleOwnerButton(PlayID,someCallbackData.lParam());
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
mOwnerDraw.associate(PlayID,String("PLAY"),String("PLAY"),String("PLAYDN"),String("PLAYDA"),OwnerDraw::NOFOCUS);
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::notifyHandler(CallbackData &someCallbackData)
|
|
{
|
|
int sliderPos(mTrackBar.getPos());
|
|
if(!sliderPos)return (CallbackData::ReturnType)sliderPos;
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(someCallbackData.wmCommandID())
|
|
{
|
|
case WAVEMENU_OPEN :
|
|
handleFileOpenEvent();
|
|
break;
|
|
case WAVEMENU_EXIT :
|
|
postMessage(*this,WM_CLOSE,0,0L);
|
|
break;
|
|
case PlayID :
|
|
handlePlay();
|
|
break;
|
|
}
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
void MainWindow::handleFileOpenEvent(void)
|
|
{
|
|
String fileHeading("FILES");
|
|
String exeSection("WAV");
|
|
OpenDialog openFileName;
|
|
|
|
openFileName.owner(0);
|
|
openFileName.instance(processInstance());
|
|
openFileName.filter("Wav");
|
|
openFileName.filterPattern("*.wav");
|
|
openFileName.fileName("*.WAV");
|
|
openFileName.fileTitle("FOO");
|
|
openFileName.initialDirectory(".");
|
|
openFileName.title("Open File");
|
|
openFileName.creationFlags(OpenDialog::EXPLORER);
|
|
if(!openFileName.getOpenFileName())return;
|
|
PureWave pureWave(processInstance());
|
|
WaveForm waveForm(openFileName.fileName());
|
|
if(!waveForm.isOkay())
|
|
{
|
|
::MessageBox(*this,openFileName.fileName(),(LPSTR)"Unknown format",MB_OK);
|
|
return;
|
|
}
|
|
mPathFileName=openFileName.fileName();
|
|
::EnableWindow(mControl,TRUE);
|
|
}
|
|
|
|
void MainWindow::handlePlay(void)
|
|
{
|
|
if(mPathFileName.isNull())return;
|
|
PureWave pureWave(processInstance());
|
|
WaveForm waveForm(mPathFileName);
|
|
if(!waveForm.isOkay())return;
|
|
((FormatChunk&)waveForm).samplesPerSecond(((FormatChunk&)waveForm).samplesPerSecond()/2);
|
|
((FormatChunk&)waveForm).averageBytesPerSecond(((FormatChunk&)waveForm).averageBytesPerSecond()/2);
|
|
pureWave.play(waveForm,DeviceHandler::Wait);
|
|
}
|