186 lines
6.4 KiB
C++
186 lines
6.4 KiB
C++
#include <mixer/mainwnd.hpp>
|
|
#include <mixer/MixerScope.hpp>
|
|
#include <mixer/mixer.hpp>
|
|
|
|
#include <mixer/ChannelCtrlMgr.hpp>
|
|
|
|
#include <sample/wave.hpp>
|
|
#include <common/odlstalt.hpp>
|
|
#include <common/pointer.hpp>
|
|
#include <common/resbmp.hpp>
|
|
#include <common/dib.hpp>
|
|
#include <common/puredwrd.hpp>
|
|
#include <common/opendlg.hpp>
|
|
|
|
char MainWindow::szClassName[]="Mixer [v1.00]";
|
|
char MainWindow::szMenuName[]="Mixer";
|
|
|
|
MainWindow::MainWindow(void)
|
|
: mxBorder(0)
|
|
{
|
|
mPaintHandler.setCallback(this,&MainWindow::paintHandler);
|
|
mDestroyHandler.setCallback(this,&MainWindow::destroyHandler);
|
|
mCommandHandler.setCallback(this,&MainWindow::commandHandler);
|
|
mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler);
|
|
mSizeHandler.setCallback(this,&MainWindow::sizeHandler);
|
|
mCreateHandler.setCallback(this,&MainWindow::createHandler);
|
|
mUserHandler.setCallback(this,&MainWindow::userHandler);
|
|
mEraseBackgroundHandler.setCallback(this,&MainWindow::eraseBackgroundHandler);
|
|
insertHandlers();
|
|
registerClass();
|
|
// ::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this);
|
|
::CreateWindow(szClassName,szClassName,WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_CLIPCHILDREN|WS_MINIMIZEBOX|WS_CLIPSIBLINGS|WS_DLGFRAME,CW_USEDEFAULT,CW_USEDEFAULT,InitialWidth,InitialHeight,NULL,NULL,processInstance(),(LPSTR)this);
|
|
mStatusBar=new StatusBar(*this);
|
|
mStatusBar.disposition(PointerDisposition::Delete);
|
|
show(SW_SHOW);
|
|
update();
|
|
}
|
|
|
|
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::EraseBackgroundHandler,&mEraseBackgroundHandler);
|
|
insertHandler(VectorHandler::UserHandler,&mUserHandler);
|
|
}
|
|
|
|
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::EraseBackgroundHandler,&mEraseBackgroundHandler);
|
|
removeHandler(VectorHandler::UserHandler,&mUserHandler);
|
|
}
|
|
|
|
void MainWindow::registerClass(void)
|
|
{
|
|
HINSTANCE hInstance(processInstance());
|
|
WNDCLASS wndClass;
|
|
|
|
if(::GetClassInfo(hInstance,className(),(WNDCLASS FAR*)&wndClass))return;
|
|
wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC;
|
|
wndClass.lpfnWndProc =(WNDPROC)Window::WndProc;
|
|
wndClass.cbClsExtra =0;
|
|
wndClass.cbWndExtra =sizeof(MainWindow*);
|
|
wndClass.hInstance =hInstance;
|
|
wndClass.hIcon =::LoadIcon(processInstance(),"MIXER");
|
|
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
|
|
wndClass.hbrBackground =(HBRUSH)::GetStockObject(NULL_BRUSH);
|
|
wndClass.lpszMenuName =szMenuName;
|
|
wndClass.lpszClassName =szClassName;
|
|
::RegisterClass(&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::eraseBackgroundHandler(CallbackData &someCallbackData)
|
|
{
|
|
return (CallbackData::ReturnType)TRUE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(someCallbackData.wParam())
|
|
{
|
|
case MIXERMENU_FILE_OPEN :
|
|
handleFileOpen();
|
|
break;
|
|
case MIXERMENU_FILE_EXIT :
|
|
sendMessage(WM_CLOSE,0,0L);
|
|
break;
|
|
default :
|
|
break;
|
|
}
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
Block<PureDWORD> stopArray;
|
|
|
|
mxBorder=::GetSystemMetrics(SM_CXDLGFRAME)<<1;
|
|
mBitmapBkGnd=new ResBitmap("BACKGROUND");
|
|
mBitmapBkGnd.disposition(PointerDisposition::Delete);
|
|
if(!mBitmapBkGnd.isOkay())return (CallbackData::ReturnType)FALSE;
|
|
mPureDevice=new PureDevice(*this);
|
|
mPureDevice.disposition(PointerDisposition::Delete);
|
|
mDIBitmapBkGnd=new DIBitmap(*mPureDevice,*mBitmapBkGnd,*mBitmapBkGnd);
|
|
mDIBitmapBkGnd.disposition(PointerDisposition::Delete);
|
|
|
|
mMixerScope=new MixerScope(*this,Scope1ID,0,Rect(xBorder,Scope1y,300,130),Font("Times New Roman",10,Font::PitchVariable|Font::FamilySwiss,Font::WeightNormal));
|
|
mMixerScope.disposition(PointerDisposition::Delete);
|
|
mMixerScope->show(SW_SHOW);
|
|
mMixerScope->update();
|
|
mMixerScope->bringWindowToTop();
|
|
|
|
mChannelControlManager=new ChannelControlManager(*this,Rect(xBorder,140,625,400),110);
|
|
mChannelControlManager.disposition(PointerDisposition::Delete);
|
|
mChannelControlManager->show(SW_SHOW);
|
|
mChannelControlManager->update();
|
|
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::paintHandler(CallbackData &someCallbackData)
|
|
{
|
|
Rect winRect;
|
|
if(!mBitmapBkGnd.isOkay())return (CallbackData::ReturnType)FALSE;
|
|
windowRect(winRect);
|
|
mDIBitmapBkGnd->copyBits(mBitmapBkGnd->ptrData(),mBitmapBkGnd->imageExtent());
|
|
mDIBitmapBkGnd->usePalette(*mPureDevice,TRUE);
|
|
mDIBitmapBkGnd->stretchBlt(*mPureDevice,Rect(0,0,(winRect.right()-winRect.left())+mxBorder,height()-mStatusBar->statusBarHeight()));
|
|
mDIBitmapBkGnd->usePalette(*mPureDevice,FALSE);
|
|
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::userHandler(CallbackData &someCallbackData)
|
|
{
|
|
/* switch(someCallbackData.wParam())
|
|
{
|
|
case WM_USER +1 :
|
|
modifyPayment();
|
|
break;
|
|
} */
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
void MainWindow::handleFileOpen()
|
|
{
|
|
OpenDialog openDialog;
|
|
String strPathFileName;
|
|
|
|
if(!openDialog.getOpenFileName(*this,"*.wav","Open File","*.wav",strPathFileName))return;
|
|
mMixerScope->setData(WaveForm(strPathFileName));
|
|
}
|
|
|
|
|