⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 magicframe.cpp

📁 强大易用的邮件收发客户端
💻 CPP
📖 第 1 页 / 共 3 页
字号:
}

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 + -