📄 magicframe.cpp
字号:
}
LRESULT CMagicFrame::OnTaskbarNotification( WPARAM /*wParam*/, LPARAM lParam )
{
//UINT uID = (UINT) wParam;
UINT uMouMsg = (UINT) lParam;
switch( uMouMsg )
{
case WM_RBUTTONDOWN:
{
SetForegroundWindow();
}
break;
case WM_RBUTTONUP: // activate IDR_NOTIFY_MENU
{
CMenu menuPopup;
VERIFY( menuPopup.LoadMenu( IDR_NOTIFY_MENU ) );
POINT ptCur;
VERIFY( GetCursorPos( &ptCur ) );
MENUITEMINFO info;
info.cbSize = sizeof( info );
info.fMask = MIIM_STATE;
info.fState = MFS_DEFAULT;
VERIFY( SetMenuItemInfo( menuPopup.m_hMenu, ID_RESTORE, FALSE, &info ) );
MenuTranslate(menuPopup.GetSubMenu(0)->m_hMenu);
menuPopup.GetSubMenu(0)->TrackPopupMenu(
TPM_LEFTALIGN | TPM_LEFTBUTTON, ptCur.x, ptCur.y, this, NULL );
}
break;
case WM_LBUTTONDBLCLK: // invoke ID_RESTORE command
{
SetForegroundWindow();
PostMessage( WM_COMMAND, ID_RESTORE );
}
break;
}
return TRUE;
}
void CMagicFrame::UpdateMailCount( int intTotalMailCount, int intNewMailCount )
{
if( intNewMailCount > 0 )
{
if( GetActiveWindow() == NULL )
{
m_bFlashNewMail = true;
}
}
HICON hIcon = intTotalMailCount ? m_hMailboxFull16 : m_hMailboxEmpty16;
m_nidA.hIcon = hIcon;
CString strTmp;
strTmp.LoadString( ( intTotalMailCount - 1 ) ? IDP_MESSAGES : IDP_MESSAGE );
StrTranslate(strTmp);
_sntprintf( m_nidA.szTip, sizeof( m_nidA.szTip ), _T("%d %s"), intTotalMailCount, strTmp );
if( !IsWatchdogOn() )
{
CreateWatchDog( 1 );
}
if( intNewMailCount )
{
if( theApp.intPopUpMainWindow )
{
OnRestore();
}
}
}
void CMagicFrame::OnRestore()
{
if (IsIconic())
SendMessage( WM_SYSCOMMAND, SC_RESTORE );
else if (theApp.m_dwFlags & MMF_MAXIMIZED)
ShowWindow(SW_MAXIMIZE);
else
ShowWindow(SW_SHOW);
}
void CMagicFrame::OnActivate( UINT nState, CWnd* /*pWndOther*/, BOOL /*bMinimized*/ )
{
if( nState == WA_ACTIVE || nState == WA_CLICKACTIVE )
{
m_bFlashNewMail = false;
}
}
void CMagicFrame::OnUpdateRestore(CCmdUI* pCmdUI)
{
pCmdUI->Enable( ( !IsWindowVisible() || IsIconic() || IsZoomed() ) );
}
LRESULT CMagicFrame::OnEndResolveHostByName( WPARAM wParam, LPARAM lParam )
{
CMagicDoc *doc = static_cast< CMagicDoc* >( GetActiveDocument() );
ASSERT( doc );
if( doc )
{
doc->EndResolveHostByName( wParam, lParam );
}
return 0;
}
void CMagicFrame::OnPreferences()
{
COptionsPage pageO;
CAdvOptionsPage pageA;
CActPPage pageB;
CCommandPage pageC;
CPlaybackPage pageP;
CPropertySheet sheet( IDP_PREFERENCES_TITLE, this );
sheet.AddPage( &pageO );
sheet.AddPage( &pageA );
sheet.AddPage( &pageB );
sheet.AddPage( &pageC );
sheet.AddPage( &pageP );
sheet.DoModal();
// this would fire even on Cancel,
// but Apply could have been pressed before, so that's fine
theApp.SaveSettings(NULL);
CMagicDoc *doc = static_cast< CMagicDoc* >( GetActiveDocument() );
if( doc )
doc->UpdateAllViews(0, HINT_OPTIONS, 0);
}
LRESULT CMagicFrame::OnStartPlayback( WPARAM , LPARAM lParam )
{
int intPlayback = theApp.intPlayback;;
int intPlaybackDevice = theApp.intPlaybackDevice;
CString strPlayback = theApp.strPlayback;
UINT *puMciID = &theApp.m_uMciID;
if( lParam )
{
CMailbox &mbox = *( (CMailbox*) lParam );
ASSERT( mbox.IsKindOf( RUNTIME_CLASS( CMailbox ) ) );
if( ACTION_DEFAULT != mbox.m_intPlayback )
{
intPlayback = mbox.m_intPlayback;
intPlaybackDevice = mbox.m_intPlaybackDevice;
strPlayback = mbox.m_strPlayback;
puMciID = &mbox.m_uMciID;
}
}
if( ACTION_NONE == intPlayback )
{
return 0;
}
if( *puMciID ) return 0;
MCI_OPEN_PARMS mciOpenParams;
DWORD dwFlags = 0;
mciOpenParams.lpstrElementName = strPlayback;
switch( intPlaybackDevice )
{
case PLAYBACK_DEVICE_FILE:
dwFlags = MCI_OPEN_ELEMENT;
break;
case PLAYBACK_DEVICE_CDA:
dwFlags = MCI_OPEN_TYPE;
mciOpenParams.lpstrDeviceType = "cdaudio";
break;
}
if( mciSendCommand( NULL, MCI_OPEN, dwFlags, (DWORD) &mciOpenParams ) )
{
MessageBeep( MB_ICONEXCLAMATION );
return 0;
}
*puMciID = mciOpenParams.wDeviceID;
MCI_PLAY_PARMS mciPlayParams;
mciPlayParams.dwCallback = (DWORD) m_hWnd;
if( mciSendCommand( *puMciID, MCI_PLAY, MCI_NOTIFY, (DWORD) &mciPlayParams ) )
{
MessageBeep( MB_ICONEXCLAMATION );
*puMciID = 0;
}
return 1;
}
LRESULT CMagicFrame::OnTestMessage( WPARAM wParam, LPARAM lParam )
{
return ShowMessage(wParam, lParam, TRUE);
}
LRESULT CMagicFrame::ShowMessage(WPARAM wParam, LPARAM lParam, BOOL bForce)
{
ASSERT( lParam );
CMailbox &mbox = *( (CMailbox*) lParam );
ASSERT( mbox.IsKindOf( RUNTIME_CLASS( CMailbox ) ) );
if( !bForce && ACTION_NONE == mbox.m_intMessage )
return 0;
CString strTmp1, strTmp2, strMessage;
strTmp1.Format( _T("%d"), (int) wParam ); // number of
strTmp2.LoadString( (wParam-1) ? IDP_MESSAGES : IDP_MESSAGE ); // single/plural
StrTranslate(strTmp2);
//AfxFormatString2( strMessage, IDP_YOU_HAVE_NEW_2, strTmp1, strTmp2 );
// result of AfxFormatString2 is not translatable, so:
MAKE_STRING(strTmp3, IDP_YOU_HAVE_NEW_2);
strTmp3.Replace("%1","%s");
strTmp3.Replace("%2","%s");
strMessage.Format(strTmp3, strTmp1, strTmp2);
CString strCaption;
strTmp1.LoadString( AFX_IDS_APP_TITLE );
StrTranslate(strTmp1);
strCaption.Format( _T("%s - %s"), mbox.m_strAlias, strTmp1 );
SetForegroundWindow();
MessageBox( strMessage, strCaption, MB_ICONINFORMATION );
return 1;
}
LRESULT CMagicFrame::OnStartMessage( WPARAM wParam, LPARAM lParam )
{
return ShowMessage(wParam, lParam, FALSE);
}
void CMagicFrame::OnSysCommand( UINT nID, LPARAM lParam )
{
if( SC_CLOSE == nID )
{
if (theApp.intMarkRead == READ_MINIM ||
theApp.intMarkRead == READ_BOTH)
m_wndSplitter.SendMessageToDescendants(WM_COMMAND, IDC_ALL_READ, 0, FALSE, FALSE);
SaveSettings();
ShowWindow( SW_HIDE );
}
else
CFrameWnd::OnSysCommand( nID, lParam );
}
LRESULT CMagicFrame::OnStartCommand( WPARAM , LPARAM lParam )
{
( (CMagicDoc*) GetActiveDocument() )->OnUpdateStopCommandAll( NULL );
int intCommand = theApp.intCommand;
int intCommandRun = theApp.intCommandRun;
CString strCommand = theApp.strCommand;
HANDLE *phCmdID = &theApp.m_hCmdID;
if( lParam )
{
CMailbox &mbox = *( (CMailbox*) lParam );
ASSERT( mbox.IsKindOf( RUNTIME_CLASS( CMailbox ) ) );
if( ACTION_DEFAULT != mbox.m_intCommand )
{
intCommand = mbox.m_intCommand;
intCommandRun = mbox.m_intCommandRun;
strCommand = mbox.m_strCommand;
phCmdID = &mbox.m_hCmdID;
}
}
if( *phCmdID )
{
//SetForegroundProcess
return 0;
}
if( ACTION_NONE == intCommand ) return 0;
strCommand.TrimLeft();
strCommand.TrimRight();
if( strCommand.IsEmpty() ) return 0;
CString strFile = strCommand;
int intFileIndex = 0;
int intDelimiter = 0;
int intDelimiterMax = strCommand.GetLength();
{
BOOL bQuoted = FALSE;
TCHAR prev = 0, curr = 0;
for( intDelimiter = 0; intDelimiter < intDelimiterMax; ++intDelimiter )
{
prev = curr;
curr = strCommand.GetAt( intDelimiter );
strFile.SetAt( intFileIndex, curr );
if( _T('\"') == curr && _T('\\') != prev ) { bQuoted = !bQuoted; --intFileIndex; }
else if( ( _T('\t') == curr || _T(' ') == curr ) && !bQuoted ) break;
++intFileIndex;
}
if( intFileIndex < intDelimiterMax ) strFile.SetAt( intFileIndex, _T('\0') );
}
CString strParameters = strCommand.Right( intDelimiterMax - intDelimiter - 1 );
int intCmdShow = SW_NORMAL;
switch( intCommandRun )
{
case COMMAND_RUN_HIDDEN: intCmdShow = SW_HIDE; break;
case COMMAND_RUN_MINIMIZED: intCmdShow = SW_SHOWMINNOACTIVE; break;
case COMMAND_RUN_MAXIMIZED: intCmdShow = SW_SHOWMAXIMIZED; break;
}
SHELLEXECUTEINFO sei =
{
sizeof( SHELLEXECUTEINFO ),
SEE_MASK_DOENVSUBST | SEE_MASK_NOCLOSEPROCESS,
NULL,
_T("open"),
strFile,
strParameters,
NULL,
intCmdShow,
0, 0, 0, 0, 0, 0, 0
};
ShellExecuteEx( &sei );
*phCmdID = sei.hProcess;
return 1;
}
BOOL CMagicFrame::OnCreateClient( LPCREATESTRUCT /*lpcs*/, CCreateContext* pContext )
{
VERIFY( m_wndSplitter.CreateStatic( this, 2, 1 ) );
VERIFY( m_wndSplitter.CreateView( 0, 0, RUNTIME_CLASS( CMailboxView ), CSize( 0, theApp.intSplitterPos ), pContext ) );
VERIFY( m_wndSplitter.CreateView( 1, 0, RUNTIME_CLASS( CExcerptView ), CSize( 0, 0 ), pContext ) );
return TRUE;
}
LRESULT CMagicFrame::OnMciNotify( WPARAM , LPARAM lParam )
{
ASSERT( GetActiveDocument() );
( (CMagicDoc*) GetActiveDocument() )->MciNotify( lParam );
return 0;
}
void CMagicFrame::OnEnterMenuLoop( BOOL bIsTrackPopupMenu )
{
SetIndicators( TRUE );
CFrameWnd::OnEnterMenuLoop( bIsTrackPopupMenu );
}
void CMagicFrame::OnExitMenuLoop( BOOL bIsTrackPopupMenu )
{
CFrameWnd::OnExitMenuLoop( bIsTrackPopupMenu );
SetIndicators( FALSE );
}
LRESULT CMagicFrame::OnUpdateItem( WPARAM wParam, LPARAM )
{
CMagicDoc *doc = ( (CMagicDoc*) GetActiveDocument() );
if( !doc ) return 0;
if( wParam ) doc->UpdateItem( (CObject*) wParam );
else doc->UpdateIdle();
return 0;
}
void CMagicFrame::OnEnterIdle(UINT nWhy, CWnd* pWho)
{
CFrameWnd::OnEnterIdle(nWhy, pWho);
SendMessage( VM_UPDATEITEM );
}
void CMagicFrame::OnQuickSend()
{
/* launch mailer now! */
if( (int) ShellExecute( NULL, _T("open"), _T("mailto:"), _T(""), _T(""), SW_NORMAL ) < 32 )
{
CString strMessage;
AfxFormatString1( strMessage, IDP_CANNOT_FOLLOW_THE_LINK_1, _T("mailto:") );
AfxMessageBox( strMessage );
}
}
void CMagicFrame::OnSuspend()
{
theApp.bIsSuspended = !theApp.bIsSuspended;
if( !IsWatchdogOn() )
{
CreateWatchDog( 1 );
}
}
void CMagicFrame::OnUpdateSuspend(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck( theApp.bIsSuspended );
}
void CMagicFrame::WatchDogTimedOut()
{
if( theApp.bIsSuspended )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -