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

📄 magicframe.cpp

📁 一个邮件客户端源代码,包括收发邮件,安排日程等很多内容
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 )
	{
		if( m_bIsAlternativeIcon )
		{
			m_nidB = m_nidA;
			m_nidB.hIcon = m_hMailboxSuspended;
			VERIFY( Shell_NotifyIcon( NIM_MODIFY, &m_nidB ) );
			SetMainWindowIcon( m_nidB.hIcon );
		}
		else
		{
			VERIFY( Shell_NotifyIcon( NIM_MODIFY, &m_nidA ) );
			SetMainWindowIcon( m_nidA.hIcon );
		}
		m_bIsAlternativeIcon = !m_bIsAlternativeIcon;

		CreateWatchDog( 1000 ); // 1 sec
	}
	else if( m_bFlashNewMail )
	{
		if( m_bIsAlternativeIcon )
		{
			VERIFY( Shell_NotifyIcon( NIM_MODIFY, &m_nidA ) );
			SetMainWindowIcon( m_nidA.hIcon );
		}
		else
		{
			m_nidB = m_nidA;
			m_nidB.hIcon = m_hMailboxEmpty16;
			VERIFY( Shell_NotifyIcon( NIM_MODIFY, &m_nidB ) );
			SetMainWindowIcon( m_nidB.hIcon );
		}
		m_bIsAlternativeIcon = !m_bIsAlternativeIcon;

		CreateWatchDog( 1000 ); // 1 sec
	}
	else
	{
		VERIFY( Shell_NotifyIcon( NIM_MODIFY, &m_nidA ) );
		SetMainWindowIcon( m_nidA.hIcon );
		m_bIsAlternativeIcon = true;
	}
}

void CMagicFrame::SwitchPane()
{
	m_wndSplitter.ActivateNext();
}

void CMagicFrame::OnEndSession(BOOL bEnding) 
{
	SaveSettings();
	theApp.SaveSettings();

	CFrameWnd::OnEndSession(bEnding);
}

void CMagicFrame::SetMainWindowIcon( HICON hTaskbarIcon )
{
	HICON hMainWindowIcon = 0;

	if( hTaskbarIcon == m_hMailboxFull16 )
	{
		hMainWindowIcon = m_hMailboxFull;
	}
	else if( hTaskbarIcon == m_hMailboxEmpty16 )
	{
		hMainWindowIcon = m_hMailboxEmpty;
	}
	else if( hTaskbarIcon == m_hMailboxSuspended )
	{
		hMainWindowIcon = m_hMailboxSuspended;
	}
	else
	{
		ASSERT( false );
	}

	SetIcon( hMainWindowIcon, FALSE );
}

void CMagicFrame::GetMessageString( UINT nID, CString& rMessage ) const
{
	CFrameWnd::GetMessageString( nID, rMessage ) ;
	StrTranslate(rMessage);
}

void CMagicFrame::OnLanguageSelect(UINT nID) 
{
	int nLang = nID - IDC_FIRST_LANGUAGE-1;
	LPCTSTR sFile = NULL;
	if (nLang<0)
		sFile = NULL;
	else if (nLang < m_aLanguages.GetSize())
		sFile = m_aLanguages[nLang].sFile;
	else
		return;
	GetDictionary()->SetDictionary(sFile, TRUE);
	// update language change
	static CMenu menu;	// static is required to avoid bufg with Alt.
	menu.DestroyMenu();
	menu.LoadMenu(IDR_MAINFRAME);
	GetDictionary()->MenuTranslate(menu.m_hMenu);
	SetMenu(&menu);

	// send message to all windows
	m_wndSplitter.SendMessageToDescendants(VM_LANGUAGE, 0, 0, FALSE, FALSE);
	theApp.strLastDiction = sFile;

	m_aLanguages.RemoveAll();	// lng list have to be updated
}

void CMagicFrame::OnUpdateFirstLanguage(CCmdUI* pCmdUI) 
{
	if (!pCmdUI->m_pSubMenu)	
		return;
	if (m_aLanguages.GetSize())
		return;	// already done
	m_aLanguages.RemoveAll();
	GetDictionary()->FindDictions(m_aLanguages);
	if (m_aLanguages.GetSize() == 0)
		return;
	for (int i = 0; i<m_aLanguages.GetSize(); i++)
	{
		pCmdUI->m_pSubMenu->AppendMenu(MF_STRING, 
			IDC_FIRST_LANGUAGE+i+1, m_aLanguages[i].sLang);
	}
}

BOOL CMagicFrame::OnToolTipText(UINT nID, NMHDR* pNMHDR, LRESULT* pResult)
{
	// need to handle both ANSI and UNICODE versions of the message
	ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);

	if (! CFrameWnd::OnToolTipText(nID, pNMHDR, pResult))
		return FALSE;

#ifndef _UNICODE
	if (pNMHDR->code == TTN_NEEDTEXTA)
	{
		TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
		CString s = pTTTA->szText;
		if (s.IsEmpty())
			s.LoadString(pNMHDR->idFrom);
		StrTranslate(s);
		lstrcpyn(pTTTA->szText, s, sizeof(pTTTA->szText));
	}
	else
	{
		TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
		CString str=pTTTW->szText;		// convert to ANSI
		if (str.IsEmpty())
			str.LoadString(pNMHDR->idFrom);
		StrTranslate(str);
		_mbstowcsz(pTTTW->szText, str, sizeof(pTTTW->szText));
	}
#else
	if (pNMHDR->code == TTN_NEEDTEXTW)
	{
		TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
		CString s = pTTTW->szText;
		StrTranslate(s);
		lstrcpyn(pTTTW->szText, s, sizeof(pTTTW->szText));
	}
#endif

	return TRUE;	// message was handled
}


void CMagicFrame::OnFileApplyfilters() 
{
	m_wndSplitter.SendMessageToDescendants(WM_COMMAND, ID_FILE_APPLYFILTERS, 0, FALSE, FALSE);
}

void CMagicFrame::OnFriends() 
{
	CString sFile;
	if (!FindLocalFile(FRIENDS_FILE, sFile, FALSE))
	{
		// no file? - create one
		CStdioFile file;
		if (!file.Open(sFile, CFile::modeCreate|CFile::typeText|CFile::modeWrite, NULL))
			return;
		file.WriteString(";If sender address is in this file, message is not filtered in any way\n");
		file.WriteString(";You can allow whole domains with *@domain.com\n");
		file.WriteString("\n;SourceForge addresses are not limited to @sourceforge.net : user@users.sourceforge.net\n");
		file.WriteString("*.sourceforge.net\n");
	}
	ShellExecute(NULL, "Open", sFile, NULL, NULL, SW_SHOW);
}

void CMagicFrame::OnClose() 
{
	SaveSettings();	
	CFrameWnd::OnClose();
}
// copied from MFC, to ensure correct state save
BOOL CMagicFrame::OnMyBarCheck(UINT nID)
{
	ASSERT(ID_VIEW_STATUS_BAR == AFX_IDW_STATUS_BAR);
	ASSERT(ID_VIEW_TOOLBAR == AFX_IDW_TOOLBAR);

	CControlBar* pBar = GetControlBar(nID);
	if (pBar != NULL)
	{
		BOOL bVis = ((pBar->GetStyle() & WS_VISIBLE) == 0);
		ShowControlBar(pBar, bVis, FALSE);
		if (nID == ID_VIEW_STATUS_BAR)
		{
			if (bVis)
				theApp.m_dwFlags &= ~MMF_NO_STATUS;
			else
				theApp.m_dwFlags |= MMF_NO_STATUS;
		}
		else if (nID == ID_VIEW_TOOLBAR)
		{
			if (bVis)
				theApp.m_dwFlags &= ~MMF_NO_TOOLBAR;
			else
				theApp.m_dwFlags |= MMF_NO_TOOLBAR;
		}
		return TRUE;
	}
	return FALSE;
}

void CMagicFrame::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu) 
{
	CFrameWnd::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
	
	if (pPopupMenu->GetMenuItemID(0) != ID_LIST_MIN)
		return;

	UpdateFilterLists();
	pPopupMenu->DeleteMenu(0, MF_BYPOSITION);
	CStringArray asActions;
	CString sAction;
	LOAD_STRING(sAction, IDP_COLUMN_TO);	asActions.Add(sAction);
	LOAD_STRING(sAction, IDP_COLUMN_FROM);	asActions.Add(sAction);
	LOAD_STRING(sAction, IDP_COLUMN_SUBJ);	asActions.Add(sAction);
	
	int nMax = min(49, m_asFilterLists.GetSize());

	for (int i=0; i<nMax; i++)
	{
		CMenu popup;
		popup.CreatePopupMenu();
		popup.AppendMenu(MF_STRING, ID_LIST_MIN+1+i, asActions[0]);
		popup.AppendMenu(MF_STRING, ID_LIST_MIN+50+i, asActions[1]);
		popup.AppendMenu(MF_STRING, ID_LIST_MIN+100+i, asActions[2]);
		pPopupMenu->AppendMenu(MF_POPUP, (UINT)popup.Detach(), m_asFilterLists[i]);
	}
}

void CMagicFrame::UpdateFilterLists()
{
	if (m_bListReady)
		return;
	m_asFilterLists.RemoveAll();
	for (int i=0; i<theApp.m_Filters.GetSize(); i++)
	{
		CMailFilter& mf = theApp.m_Filters.ElementAt(i);
		for (int c=0; c<CMailFilter::nConditions; c++)
		{
			if (mf.m_aCnd[c].m_sText.Find('$') != 0)
				continue;
			CString sFile = mf.m_aCnd[c].m_sText.Mid(1);
			sFile.MakeLower();
			sFile.TrimRight();
			for (int j=0; j<m_asFilterLists.GetSize(); j++)
			{
				if (m_asFilterLists[j] == sFile)
				{
					sFile.Empty();
					break;
				}
			}
			if (!sFile.IsEmpty())
				m_asFilterLists.Add(sFile);
		}
	}
	m_bListReady = TRUE;
}

void CMagicFrame::OnViewDelLog() 
{
	CString sPath;
	if (!FindLocalFile(DELLOG_FILE, sPath, TRUE))
		return;
	CString sTxtApp;
	GetTextHandler(sTxtApp, sPath);

	WinExec(sTxtApp, SW_SHOW);
}

void CMagicFrame::OnKillSpam() 
{
	m_wndSplitter.SendMessageToDescendants(WM_COMMAND, ID_KILL_SPAM, 0, FALSE, FALSE);
}
/////////////////////////////////////////////////////////////////////////////
// DReTester dialog


DReTester::DReTester(CWnd* pParent /*=NULL*/)
	: CDialog(DReTester::IDD, pParent)
{
	//{{AFX_DATA_INIT(DReTester)
	m_sRE = _T("");
	m_sText = _T("");
	//}}AFX_DATA_INIT
}


void DReTester::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(DReTester)
	DDX_Text(pDX, IDC_RE, m_sRE);
	DDX_Text(pDX, IDC_TEXT, m_sText);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(DReTester, CDialog)
	//{{AFX_MSG_MAP(DReTester)
	ON_BN_CLICKED(IDOK, OnOk)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DReTester message handlers

void DReTester::OnOk() 
{
	UpdateData();
	CString s(m_sRE);
	if (s.GetLength()<=0)
		return;
	if (s[0]!='/')
		s.Format("/%s/i", m_sRE);
	CRegExp re;
	if (!re.SetExpr((LPTSTR)(LPCTSTR)s))
	{
		AfxMessageBox("Bad formed!");
		GetDlgItem(IDC_RE)->SetFocus();
		return;
	}
	SMatches m;
	if (re.Parse((LPTSTR)(LPCTSTR)m_sText, &m))
	{
		SendDlgItemMessage(IDC_TEXT, EM_SETSEL, m.s[0], m.e[0]);
		GetDlgItem(IDC_TEXT)->SetFocus();
	}
	else
	{
		SendDlgItemMessage(IDC_TEXT, EM_SETSEL, 0, 0);
		AfxMessageBox("Not Found!");
	}
}
void CMagicFrame::OnTestRe() 
{
	DReTester dlg;
	dlg.DoModal();
}

CMagicDoc* GetDoc()
{
	POSITION pos = AfxGetApp()->GetFirstDocTemplatePosition();
	CDocTemplate* pDT = AfxGetApp()->GetNextDocTemplate(pos);
	if (!pDT)
		return NULL;
	pos = pDT->GetFirstDocPosition();
	return (CMagicDoc*)pDT->GetNextDoc(pos);
}

void CMagicFrame::OnFilters() 
{
	CMagicDoc* pDoc = GetDoc();
	if (!pDoc)
		return;

	DFilters dlg(pDoc);
	dlg.DoModal();
	m_bListReady = FALSE;
}

BOOL CMagicFrame::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct) 
{
	if (pCopyDataStruct && pCopyDataStruct->dwData==1)
	{
		OnRestore();
	}
	return CFrameWnd::OnCopyData(pWnd, pCopyDataStruct);
}

BOOL CMagicFrame::OnQueryEndSession() 
{
	CMagicDoc* pDoc = GetDoc();
	if (pDoc && pDoc->IsModified())
	{
		SendMessage(WM_COMMAND, ID_FILE_SAVE);
	}
	if (!CFrameWnd::OnQueryEndSession())
		return FALSE;
	

	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -