Files
Work/winmus/MAINWND.CPP
2024-08-07 09:16:27 -04:00

116 lines
3.3 KiB
C++

#include <common/profile.hpp>
#include <midiwrt/muscnv.hpp>
#include <winmus/mainwnd.hpp>
#include <winmus/filehelp.hpp>
#include <winmus/mididef.hpp>
#include <winmus/musdlg.hpp>
char MainWindow::szClassName[]="MUS File Converter";
char MainWindow::szMenuName[]="MUSMENU";
MainWindow::MainWindow(HINSTANCE hInstance)
: mPaintHandler(this,&MainWindow::paintHandler),
mDestroyHandler(this,&MainWindow::destroyHandler),
mCommandHandler(this,&MainWindow::commandHandler),
mMenuSelectHandler(this,&MainWindow::menuSelectHandler),
mhInstance(hInstance)
{
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
insertHandler(VectorHandler::MenuSelectHandler,&mMenuSelectHandler);
registerClass();
::CreateWindow(szClassName,szClassName,
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_SIZEBOX|WS_CLIPCHILDREN,
CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,
NULL,NULL,mhInstance,(LPSTR)this);
show(SW_SHOW);
update();
}
MainWindow::~MainWindow()
{
removeHandlers();
if((HWND)*this)destroy();
}
void MainWindow::registerClass(void)const
{
WNDCLASS wndClass;
if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return;
wndClass.style =CS_HREDRAW|CS_VREDRAW|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(WHITE_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)0;
}
CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData)
{
switch(GET_WM_COMMAND_ID(someCallbackData.wParam(),someCallbackData.lParam()))
{
case IDM_OPTIONLOAD :
handleLoadRequest();
break;
case IDM_OPTIONEXIT :
destroy();
break;
default :
break;
}
return (CallbackData::ReturnType)FALSE;
}
CallbackData::ReturnType MainWindow::menuSelectHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)0;
}
CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/)
{
return (CallbackData::ReturnType)0;
}
void MainWindow::removeHandlers(void)
{
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
removeHandler(VectorHandler::MenuSelectHandler,&mMenuSelectHandler);
}
void MainWindow::handleLoadRequest(void)
{
SelectFile selector(*this);
String musPathFileName;
String midiPathFileName;
selector.SetFileSpec(String(STRING_ASTERISKDOTMUS));
if(selector.GetFileName(musPathFileName,String::MaxString))
{
midiPathFileName=musPathFileName;
midiPathFileName.token(".");
midiPathFileName+=".MID";
MUSDlg musDlg(*this,midiPathFileName,musPathFileName);
musDlg.performDialog();
}
return;
}