#include #include #include #include #include #include char SlideWindow::szClassName[]="SlideShow"; char SlideWindow::szMenuName[]=""; HINSTANCE SlideWindow::smhInstance=0; SlideWindow::SlideWindow() : mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), mpStatusBar(0), mhSystemMenu(0), mhFrameMenu(0), mhSlideMenu(0), mlpToolBar(0), mCurrentFrame(0), mToolbarVisibility(TRUE), mIsRunning(TRUE) { } SlideWindow::SlideWindow(const SlideWindow &/*someViewWindow*/) : mhClientWindow(0), mhFrameWindow(0), mIsDestroyed(0), mpStatusBar(0), mhSystemMenu(0), mhFrameMenu(0), mhSlideMenu(0), mlpToolBar(0), mCurrentFrame(0), mToolbarVisibility(TRUE), mIsRunning(TRUE) { } SlideWindow::~SlideWindow() { if(mhSlideMenu)::DestroyMenu(mhSlideMenu); if(!mIsDestroyed&&GetHandle()) ::SendMessage(mhClientWindow,WM_MDIDESTROY,(WPARAM)GetHandle(),0L); if(mlpToolBar)delete mlpToolBar; } void SlideWindow::Register(HINSTANCE hInstance) { WNDCLASS wndclass; smhInstance=hInstance; wndclass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS; wndclass.lpfnWndProc =(WNDPROC)MDIWindow::MDIWndProc; wndclass.cbClsExtra =0; wndclass.cbWndExtra =sizeof(SlideWindow*); wndclass.hInstance =hInstance; 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); } void SlideWindow::showWindow(HWND hClientWindow,Block &pathFileNames,BWindow *statusBar,HMENU hFrameMenu) { size_t size((int)pathFileNames.size()); mBitmaps.size(size); waitCursor(TRUE); for(int i=0;iaddBitmap(String(STRING_LITERALEJECT,Main::processInstance()),WM_COMMAND,MENU_TBEJECT,0L); mlpToolBar->addBitmap(String(STRING_LITERALPAUSE,Main::processInstance()),WM_COMMAND,MENU_TBPAUSE,0L); mlpToolBar->addBitmap(String(STRING_LITERALPLAY,Main::processInstance()),WM_COMMAND,MENU_TBPLAY,0L); mlpToolBar->addBitmap(String(STRING_LITERALTIME,Main::processInstance()),WM_COMMAND,MENU_TBTIME,0L); mlpToolBar->showWindow(); } void SlideWindow::handleDestroyEvent() { mIsDestroyed=TRUE; return; } void SlideWindow::handleActivateEvent(WPARAM wParam,LPARAM /*lParam*/) { if(wParam) { ::SetTimer(GetHandle(),idTimer,TimeOut,0); ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhSlideMenu,::GetSubMenu(mhSlideMenu,0))); if(mToolbarVisibility && mlpToolBar && !mlpToolBar->isVisible())mlpToolBar->showWindow(); else if(!mToolbarVisibility && mlpToolBar && mlpToolBar->isVisible())mlpToolBar->showWindow(FALSE); ::SendMessage(mhFrameWindow,WM_COMMAND,IDM_INVALIDATEMDIWINDOWS,MAKELPARAM(GetHandle(),0)); } else { ::KillTimer(GetHandle(),idTimer); if(mlpToolBar && mlpToolBar->isVisible())mlpToolBar->showWindow(FALSE); ::SendMessage(mhClientWindow,WM_MDISETMENU,FALSE,MAKELONG(mhFrameMenu,0)); } ::DrawMenuBar(mhFrameWindow); return; } long SlideWindow::WndProc(UINT message,WPARAM wParam,LPARAM lParam) { switch(message) { case WM_CREATE : return FALSE; case WM_TIMER : handleTimerEvent(); return FALSE; case WM_PAINT : Paint(); return FALSE; case WM_MDIACTIVATE : handleActivateEvent(wParam,lParam); return FALSE; case WM_QUERYENDSESSION : break; case WM_DESTROY : handleDestroyEvent(); return FALSE; case WM_COMMAND : switch(GET_WM_COMMAND_ID(wParam,lParam)) { case IDM_TOOLBAR : handleToolbarToggle(); return FALSE; case MENU_TBEJECT : ::SendMessage(GetHandle(),WM_CLOSE,0,0L); return FALSE; case MENU_TBPAUSE : mIsRunning=FALSE; return FALSE; case MENU_TBPLAY : mIsRunning=TRUE; return FALSE; case MENU_TBTIME : return FALSE; default : break; } } return ::DefMDIChildProc(GetHandle(),message,wParam,lParam); } void SlideWindow::handleToolbarToggle(void) { String showToolbarString(STRING_SHOWTOOLBAR,Main::processInstance()); String hideToolbarString(STRING_HIDETOOLBAR,Main::processInstance()); String menuString; ::GetMenuString(mhSlideMenu,IDM_TOOLBAR,menuString,String::MaxString,MF_BYCOMMAND); if(showToolbarString==menuString) { ::ModifyMenu(mhSlideMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)hideToolbarString); mlpToolBar->showWindow(TRUE); mToolbarVisibility=TRUE; } else { ::ModifyMenu(mhSlideMenu,IDM_TOOLBAR,MF_STRING|MF_ENABLED,IDM_TOOLBAR,(LPSTR)showToolbarString); mlpToolBar->showWindow(FALSE); mToolbarVisibility=FALSE; } ::DrawMenuBar(GetHandle()); } void SlideWindow::Paint(void) { PAINTSTRUCT ps; int isActiveWindow; ::BeginPaint(GetHandle(),&ps); isActiveWindow=GetHandle()==(HWND)LOWORD(::SendMessage(mhClientWindow,WM_MDIGETACTIVE,0,0L)); isActiveWindow=FALSE; mBitmaps[mCurrentFrame].displayBitmap(GetHandle(),0,isActiveWindow,FALSE); ::EndPaint(GetHandle(),&ps); } void SlideWindow::handleTimerEvent(void) { if(mIsRunning) { int isActiveWindow(GetHandle()==(HWND)LOWORD(::SendMessage(mhClientWindow,WM_MDIGETACTIVE,0,0L))); isActiveWindow=FALSE; mBitmaps[mCurrentFrame++].displayBitmap(GetHandle(),0,isActiveWindow,FALSE); if(mCurrentFrame>=mBitmaps.size())mCurrentFrame=0; } }