246 lines
9.0 KiB
C++
246 lines
9.0 KiB
C++
#include <vidcap/mainwnd.hpp>
|
|
#include <vidcap/rsrc.hpp>
|
|
#include <vidcap/entrydlg.hpp>
|
|
#include <vidcap/srcdlg.hpp>
|
|
#include <vidcap/vidreg.hpp>
|
|
#include <common/assert.hpp>
|
|
#include <common/profile.hpp>
|
|
|
|
char MainWindow::szClassName[]="Video Capture";
|
|
char MainWindow::szMenuName[]="CAPMENU";
|
|
|
|
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),
|
|
mhInstance(hInstance)
|
|
{
|
|
insertHandlers();
|
|
registerClass();
|
|
::CreateWindow(szClassName,szClassName,
|
|
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN|WS_SIZEBOX,
|
|
CW_USEDEFAULT,CW_USEDEFAULT,
|
|
DefaultWidth,DefaultHeight,
|
|
NULL,NULL,mhInstance,(LPSTR)this);
|
|
mStatusBar=new StatusBarEx(*this,StatusBarID);
|
|
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::TimerHandler,&mTimerHandler);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
void MainWindow::registerClass(void)const
|
|
{
|
|
WNDCLASS wndClass;
|
|
|
|
if(::GetClassInfo(mhInstance,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 =mhInstance;
|
|
wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION);
|
|
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
|
|
wndClass.hbrBackground =(HBRUSH)::GetStockObject(GRAY_BRUSH);
|
|
wndClass.lpszMenuName =szMenuName;
|
|
wndClass.lpszClassName =szClassName;
|
|
::RegisterClass(&wndClass);
|
|
assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass));
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
mMainMenu=new PureMenu(::GetMenu(*this));
|
|
mMainMenu.disposition(PointerDisposition::Delete);
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
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*/)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/)
|
|
{
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData)
|
|
{
|
|
switch(someCallbackData.wmCommandID())
|
|
{
|
|
case FILE_EXIT :
|
|
close();
|
|
destroy();
|
|
break;
|
|
case FILE_OPEN :
|
|
handleFileOpen();
|
|
break;
|
|
case FILE_CLOSE :
|
|
handleFileClose();
|
|
break;
|
|
case CAPMENU_OPTIONS_SAVE_FRAMES :
|
|
handleSaveFrames();
|
|
break;
|
|
case CAPMENU_OPTIONS_PREVIEW :
|
|
handlePreview();
|
|
break;
|
|
case CAPMENU_OPTIONS_GRABFRAME :
|
|
mBitmapCapture->grabFrame();
|
|
break;
|
|
case CAPMENU_OPTIONS_GRABFRAMENOSTOP :
|
|
mBitmapCapture->grabFrameNoStop();
|
|
break;
|
|
case CAPMENU_DIALOGVIDEODISPLAY :
|
|
mBitmapCapture->dialogVideoDisplay();
|
|
break;
|
|
case CAPMENU_DIALOGVIDEOSOURCE :
|
|
mBitmapCapture->dialogVideoSource();
|
|
break;
|
|
case CAPMENU_DIALOGVIDEOFORMAT :
|
|
mBitmapCapture->dialogVideoFormat();
|
|
break;
|
|
case CAPMENU_SETTINGS :
|
|
handleSettings();
|
|
break;
|
|
}
|
|
return (CallbackData::ReturnType)FALSE;
|
|
}
|
|
|
|
void MainWindow::checkDriverOptions(void)
|
|
{
|
|
DriverCaps driverCaps;
|
|
|
|
mBitmapCapture->getDriverCaps(driverCaps);
|
|
|
|
if(!driverCaps.hasDlgVideoDisplay())mMainMenu->checkMenuItem(CAPMENU_DIALOGVIDEODISPLAY,MF_BYCOMMAND|MF_GRAYED);
|
|
else mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEODISPLAY,PureMenu::ByCommand,PureMenu::ItemEnabled);
|
|
if(!driverCaps.hasDlgVideoFormat())mMainMenu->checkMenuItem(CAPMENU_DIALOGVIDEOFORMAT,MF_BYCOMMAND|MF_GRAYED);
|
|
else mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOFORMAT,PureMenu::ByCommand,PureMenu::ItemEnabled);
|
|
if(!driverCaps.hasDlgVideoSource())mMainMenu->checkMenuItem(CAPMENU_DIALOGVIDEOSOURCE,MF_BYCOMMAND|MF_GRAYED);
|
|
else mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOSOURCE,PureMenu::ByCommand,PureMenu::ItemEnabled);
|
|
}
|
|
|
|
void MainWindow::handleFileOpen(void)
|
|
{
|
|
LRESULT driverIndex;
|
|
SourceDialog sourceDialog(*this);
|
|
driverIndex=sourceDialog.perform();
|
|
if(-1!=driverIndex)
|
|
{
|
|
if(mBitmapCapture.isOkay())mBitmapCapture.destroy();
|
|
mBitmapCapture=new BmpCap(*this,driverIndex); //,vidReg.getPreviewWidth(),vidReg.getPreviewHeight(),vidReg.getCaptureWidth(),vidReg.getCaptureHeight(),vidReg.getCaptureFile());
|
|
mBitmapCapture.disposition(PointerDisposition::Delete);
|
|
if(!mBitmapCapture->isConnected()){::MessageBox(*this,"Failed to connect to device","Device Connect",MB_ICONSTOP);return;}
|
|
else
|
|
{
|
|
mMainMenu->enableMenuItem(FILE_CLOSE,PureMenu::ByCommand,PureMenu::ItemEnabled);
|
|
mMainMenu->enableMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,PureMenu::ByCommand,PureMenu::ItemEnabled);
|
|
mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYPOSITION|MF_UNCHECKED);
|
|
mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAME,PureMenu::ByCommand,PureMenu::ItemEnabled);
|
|
mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAMENOSTOP,PureMenu::ByCommand,PureMenu::ItemEnabled);
|
|
mMainMenu->enableMenuItem(CAPMENU_OPTIONS_PREVIEW,PureMenu::ByCommand,PureMenu::ItemEnabled);
|
|
checkDriverOptions();
|
|
}
|
|
}
|
|
}
|
|
|
|
void MainWindow::handleFileClose(void)
|
|
{
|
|
if(mBitmapCapture.isOkay())mBitmapCapture.destroy();
|
|
mMainMenu->enableMenuItem(FILE_CLOSE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed));
|
|
mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEODISPLAY,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed));
|
|
mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOFORMAT,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed));
|
|
mMainMenu->enableMenuItem(CAPMENU_DIALOGVIDEOSOURCE,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed));
|
|
mMainMenu->enableMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed));
|
|
mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYCOMMAND|MF_UNCHECKED);
|
|
mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAME,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed));
|
|
mMainMenu->enableMenuItem(CAPMENU_OPTIONS_GRABFRAMENOSTOP,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed));
|
|
mMainMenu->enableMenuItem(CAPMENU_OPTIONS_PREVIEW,PureMenu::ByCommand,PureMenu::InsertFlags(PureMenu::ItemDisabled|PureMenu::ItemGrayed));
|
|
mMainMenu->checkMenuItem(CAPMENU_OPTIONS_PREVIEW,MF_BYCOMMAND|MF_UNCHECKED);
|
|
}
|
|
|
|
void MainWindow::handleSaveFrames(void)
|
|
{
|
|
if(!mBitmapCapture->isConnected())return;
|
|
if(MF_CHECKED==mMainMenu->getMenuState(CAPMENU_OPTIONS_SAVE_FRAMES,PureMenu::ByCommand))
|
|
{
|
|
mBitmapCapture->saveFrames(false);
|
|
mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYCOMMAND|MF_UNCHECKED);
|
|
}
|
|
else
|
|
{
|
|
mBitmapCapture->saveFrames(true);
|
|
mMainMenu->checkMenuItem(CAPMENU_OPTIONS_SAVE_FRAMES,MF_BYCOMMAND|MF_CHECKED);
|
|
}
|
|
}
|
|
|
|
void MainWindow::handlePreview(void)
|
|
{
|
|
if(!mBitmapCapture->isConnected())return;
|
|
if(MF_CHECKED==mMainMenu->getMenuState(CAPMENU_OPTIONS_PREVIEW,PureMenu::ByCommand))
|
|
{
|
|
mMainMenu->checkMenuItem(CAPMENU_OPTIONS_PREVIEW,MF_BYCOMMAND|MF_UNCHECKED);
|
|
mBitmapCapture->preview(false);
|
|
}
|
|
else
|
|
{
|
|
VidReg vidReg;
|
|
mMainMenu->checkMenuItem(CAPMENU_OPTIONS_PREVIEW,MF_BYCOMMAND|MF_CHECKED);
|
|
mBitmapCapture->setPreviewRate(vidReg.getPreviewRate());
|
|
mBitmapCapture->preview(true);
|
|
}
|
|
}
|
|
|
|
void MainWindow::handleSettings()
|
|
{
|
|
EntryDialog entryDialog(*this);
|
|
entryDialog.perform();
|
|
} |