210 lines
6.3 KiB
C++
210 lines
6.3 KiB
C++
#include <stdio.h>
|
|
#include <math.h>
|
|
#include <assert.h>
|
|
#include <mdiwin/slide.hpp>
|
|
#include <mdiwin/main.hpp>
|
|
#include <mdiwin/mdiwin.h>
|
|
|
|
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<String> &pathFileNames,BWindow *statusBar,HMENU hFrameMenu)
|
|
{
|
|
size_t size((int)pathFileNames.size());
|
|
|
|
mBitmaps.size(size);
|
|
waitCursor(TRUE);
|
|
for(int i=0;i<size;i++)mBitmaps[i]=pathFileNames[i];
|
|
waitCursor(FALSE);
|
|
mhFrameMenu=hFrameMenu;
|
|
mhSlideMenu=::LoadMenu(smhInstance,(LPSTR)"slideMenu");
|
|
mhClientWindow=hClientWindow;
|
|
mhFrameWindow=::GetParent(mhClientWindow);
|
|
mpStatusBar=statusBar;
|
|
createMDIChildWindow();
|
|
createToolBarWindow();
|
|
}
|
|
|
|
void SlideWindow::createMDIChildWindow(void)
|
|
{
|
|
MDICREATESTRUCT createStruct;
|
|
|
|
createStruct.szClass=(LPSTR)szClassName;
|
|
createStruct.szTitle=(LPSTR)szClassName;
|
|
createStruct.hOwner=smhInstance;
|
|
createStruct.x=CW_USEDEFAULT;
|
|
createStruct.y=CW_USEDEFAULT;
|
|
createStruct.cx=CW_USEDEFAULT;
|
|
createStruct.cy=CW_USEDEFAULT;
|
|
createStruct.style=WS_SYSMENU|WS_CAPTION|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_VISIBLE|WS_CLIPCHILDREN;
|
|
createStruct.lParam=(LONG)this;
|
|
::SendMessage(mhClientWindow,WM_MDICREATE,0,(LONG)(LPMDICREATESTRUCT)&createStruct);
|
|
Show(SW_SHOW);
|
|
Update();
|
|
}
|
|
|
|
void SlideWindow::createToolBarWindow(void)
|
|
{
|
|
mlpToolBar=new ToolBar(GetHandle(),String(STRING_LITERALTOOLBAR,Main::processInstance()));
|
|
mlpToolBar->addBitmap(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;
|
|
}
|
|
}
|