📄 magicframe.cpp
字号:
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 + -