// FrameworkNotifySink.cpp: implementation of the CFrameworkNotifySink class. // ////////////////////////////////////////////////////////////////////// #include #include #include "sink.h" #include "mbutton.h" #include "resource.h" #include "mmenu.h" #include "shellico.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// HWND CFrameworkNotifySink::m_hwndTitle = NULL; extern BOOL fPlaying; extern BOOL fIntro; extern BOOL fShellMode; extern HPALETTE hpalMain; //main palette of app extern LPCDOPT g_pOptions; extern LPCDDATA g_pData; extern HWND hwndMain; CFrameworkNotifySink::CFrameworkNotifySink(PCOMPNODE pNode) { m_dwRef = 0; m_pNode = pNode; LoadString(NULL,IDS_APPNAME,m_szAppName,sizeof(m_szAppName)/sizeof(TCHAR)); } CFrameworkNotifySink::~CFrameworkNotifySink() { } HRESULT CFrameworkNotifySink::QueryInterface(REFIID riid, LPVOID *ppvObj) { return S_OK; } ULONG CFrameworkNotifySink::AddRef() { return (m_dwRef++); } ULONG CFrameworkNotifySink::Release() { if (0!=--m_dwRef) return m_dwRef; delete this; return 0; } HRESULT CFrameworkNotifySink::OnEvent(MMEVENTS mmEventID, LPVOID pEvent) { HRESULT hr = S_OK; switch (mmEventID) { case (MMEVENT_SETTITLE) : { MMSETTITLE* pSetTitle = (MMSETTITLE*)pEvent; if (pSetTitle->mmInfoText == MMINFOTEXT_TITLE) { if (m_hwndTitle) { _tcscpy(m_pNode->szTitle,pSetTitle->szTitle); TCHAR szText[MAX_PATH]; wsprintf(szText,TEXT("%s - %s"),pSetTitle->szTitle,m_szAppName); //only do this if the titles don't match TCHAR szOrgTitle[MAX_PATH]; GetWindowText(m_hwndTitle,szOrgTitle,sizeof(szOrgTitle)/sizeof(TCHAR)); if (_tcscmp(szOrgTitle,szText)!=0) { SetWindowText(m_hwndTitle,szText); RedrawWindow(m_hwndTitle,NULL,NULL,RDW_FRAME|RDW_INVALIDATE); if (fShellMode) { ShellIconSetTooltip(); } //end if shell mode } } //end if window ok } //end if title if (pSetTitle->mmInfoText == MMINFOTEXT_DESCRIPTION) { if (IsIconic(m_hwndTitle)) { TCHAR szText[MAX_PATH]; wsprintf(szText,TEXT("%s - %s"),pSetTitle->szTitle,m_szAppName); SetWindowText(m_hwndTitle,szText); } if (fShellMode) { ShellIconSetTooltip(); } } //end if description } break; case (MMEVENT_ONPLAY) : { CMButton* pButton = GetMButtonFromID(m_hwndTitle,IDB_PLAY); if (pButton) { if (fIntro) { pButton->SetIcon(IDI_MODE_INTRO); pButton->SetToolTipID(IDB_TT_INTRO); } else { pButton->SetIcon(IDI_ICON_PAUSE); pButton->SetToolTipID(IDB_TT_PAUSE); } } if (fShellMode) { ShellIconSetState(PAUSE_ICON); } //end if shell mode SetThreadExecutionState(ES_SYSTEM_REQUIRED | ES_CONTINUOUS); fPlaying = TRUE; } break; case (MMEVENT_ONSTOP) : { CMButton* pButton = GetMButtonFromID(m_hwndTitle,IDB_PLAY); if (pButton) { pButton->SetIcon(IDI_ICON_PLAY); pButton->SetToolTipID(IDB_TT_PLAY); } SetThreadExecutionState(ES_CONTINUOUS); fPlaying = FALSE; if (fShellMode) { ShellIconSetState(PLAY_ICON); } //end if shell mode } break; case (MMEVENT_ONPAUSE) : { CMButton* pButton = GetMButtonFromID(m_hwndTitle,IDB_PLAY); if (pButton) { pButton->SetIcon(IDI_ICON_PLAY); pButton->SetToolTipID(IDB_TT_PLAY); } SetThreadExecutionState(ES_CONTINUOUS); fPlaying = FALSE; if (fShellMode) { ShellIconSetState(PLAY_ICON); } //end if shell mode } break; case (MMEVENT_ONMEDIAUNLOADED) : { CMButton* pButton = GetMButtonFromID(m_hwndTitle,IDB_PLAY); if (pButton) { pButton->SetIcon(IDI_ICON_PLAY); pButton->SetToolTipID(IDB_TT_PLAY); } SetThreadExecutionState(ES_CONTINUOUS); fPlaying = FALSE; if (fShellMode) { ShellIconSetState(NODISC_ICON); } //end if shell mode } break; case (MMEVENT_ONUSERNOTIFY) : { } break; case (MMEVENT_ONDISCCHANGED) : { MMONDISCCHANGED* pDisc = (MMONDISCCHANGED*)pEvent; SendMessage(m_hwndTitle,WM_DISCCHANGED,pDisc->nNewDisc,pDisc->fDisplayVolChange); } break; } return hr; } void* CFrameworkNotifySink::GetCustomMenu() { CustomMenu* pMenu = NULL; AllocCustomMenu(&pMenu); return (pMenu); } HPALETTE CFrameworkNotifySink::GetPalette() { return hpalMain; } void* CFrameworkNotifySink::GetOptions() { return ((void*)GetCDOpt()); } void* CFrameworkNotifySink::GetData() { return ((void*)GetCDData()); } //////////////////////////////////////////////////////////////////////////////////////////// // * GetCDOpt // Creates or returns the global CDOpt //////////////////////////////////////////////////////////////////////////////////////////// LPCDOPT GetCDOpt() { if (g_pOptions == NULL) { CDOPT_CreateInstance(NULL, IID_ICDOpt, (void**)&g_pOptions); } return g_pOptions; } //////////////////////////////////////////////////////////////////////////////////////////// // * GetCDData // Creates or returns the global CDOpt //////////////////////////////////////////////////////////////////////////////////////////// LPCDDATA GetCDData() { if (g_pData == NULL) { HRESULT hr = CDOPT_CreateInstance(NULL, IID_ICDData, (void**)&g_pData); } return g_pData; }