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

📄 magicframe.cpp

📁 强大易用的邮件收发客户端
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		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();

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