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

📄 excerptview.cpp

📁 一个邮件客户端源代码,包括收发邮件,安排日程等很多内容
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				xrpt.m_tmDate.Format( _T("%c") ) : _T("...");
			VERIFY( list.SetItemText( intIndex, COLUMN_DATE, strTmp ) );
		}
		int nImage = -1;
		BOOL bHighPr = (xrpt.m_nPriority>0 && xrpt.m_nPriority<3);
		if (xrpt.m_bitRemoveFromServer)
			nImage = MI_DELETED;
		else if (xrpt.m_bitDownloadData)
			nImage = MI_TOLOAD;
		else if (!xrpt.WasRead() && bHighPr)
			nImage = MI_NEW_MAIL_HIGH;
		else if ( !xrpt.WasRead() )
			nImage = MI_NEW_MAIL;
		else if (bHighPr)
			nImage = MI_HIGH;
		else if (xrpt.m_strContent.Find("multipart")==0)
			nImage = MI_ATTACH;
		list.SetItem(intIndex, 0, LVIF_IMAGE, NULL, nImage, 0, 0, 0);

		//
		int nOverlay = 0;
		if (xrpt.m_strContent.Find("multipart")==0)
		{
			nOverlay = INDEXTOOVERLAYMASK( 1 );
		}
		list.SetItemState( intIndex, nOverlay, LVIS_OVERLAYMASK );


		if( bInserted || xrpt.IsChanged( COLUMN_SIZE ) )
		{
			CString strTmp = _T("...");
			if( xrpt.m_intSize ) strTmp.Format( _T("%d"), xrpt.m_intSize );
			VERIFY( list.SetItemText( intIndex, COLUMN_SIZE, strTmp ) );
		}

		if( bInserted || xrpt.IsChanged( theApp.intEVSortColumn ) ) SortItems(); 
	}
	else if( pHint->IsKindOf( RUNTIME_CLASS( CMailbox ) ) )
	{
		CMailbox &mbox = *(CMailbox*) pHint;

		if( mbox.IsChanged( COLUMN_SELECTED ) )
		{
			for( int i = 0; i < mbox.m_arrayExcerpt.GetSize(); ++i )
			{
				OnUpdate( 0, HINT_UPDATE_ITEM, mbox.m_arrayExcerpt[i] );
			}
		}

		if( mbox.IsChanged( COLUMN_ALIAS ) )
		{
			for( int i = 0; i < list.GetItemCount(); ++i )
			{
				CExcerpt &xrpt = *(CExcerpt*) list.GetItemData(i);
				if( xrpt.m_pMailbox == &mbox ) 
				{
					VERIFY( list.SetItemText( i, COLUMN_MBOX, xrpt.m_pMailbox->m_strAlias ) );
				}
			}
		}
	}
	else ASSERT( 0 );
}

void CExcerptView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	UNUSED_ALWAYS(pNMHDR);
	UNUSED_ALWAYS(pResult);
	int nDiff = GetTickCount() - m_dwLastRButtonDown;
	if (m_dwLastRButtonDown && nDiff>250 && nDiff<10000)
	{
		DoAction(theApp.intRB2Action, ACT_HEADER);
	}
	else
		DoAction(theApp.intRBAction, ACT_MENU);
}

void CExcerptView::DoAction(int nAction, int nDefault)
{
	m_TitleTip.Hide();
	switch (nAction)
	{
		case ACT_QVIEW:
			SendMessage( WM_COMMAND, ID_QUICK_VIEW );
			break;
		case ACT_MENU:
		{
			POINT pt = {0};
			VERIFY( GetCursorPos( &pt ) );
			ShowContextMenu( pt );
			break;
		}
		case ACT_HEADER:
			theApp.m_nMsgPropPage = 1;
			SendMessage( WM_COMMAND, ID_EDIT_PROPERTIES );
			break;
		case ACT_PROPS:
			SendMessage( WM_COMMAND, ID_EDIT_PROPERTIES );
			break;
		case ACT_PREVIEW:
			SendMessage( WM_COMMAND, ID_TEXT_PREVIEW );
			break;
		case ACT_ASTEXT:
			SendMessage( WM_COMMAND, ID_QUICKTEXT );
			break;
		default:
			if (nDefault>0)
				DoAction(nDefault, 0);
			break;
	}
}


void CExcerptView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	UNUSED_ALWAYS(pNMHDR);
	DoAction(theApp.intDblAction, ACT_QVIEW);
	*pResult = 0;
}

void CExcerptView::OnEditProperties() 
{
	CTypedPtrArray < CPtrArray, CExcerpt* > arrayExcerpt;
	CListCtrl &list = GetListCtrl();

	int i = -1;
	while( -1 != ( i = list.GetNextItem( i, LVNI_SELECTED ) ) )
	{
		arrayExcerpt.Add( (CExcerpt*) list.GetItemData(i) );
	}
	
	CHeaderPage pageH; 
	CRawHead pageRaw; 

	pageH.Attach( &arrayExcerpt );
	pageRaw.Attach( &arrayExcerpt );

	CPropertySheet sheet( IDP_EXCERPT_PROPERTIES_TITLE, AfxGetMainWnd() );
	sheet.AddPage( &pageH );
	sheet.AddPage( &pageRaw );
	
	if (theApp.m_nMsgPropPage)
	{
		sheet.m_psh.nStartPage = theApp.m_nMsgPropPage;
	}
	theApp.m_nMsgPropPage = 0;

	sheet.m_psh.dwFlags |= PSH_NOAPPLYNOW;

	sheet.DoModal();
}

void CExcerptView::OnUpdateIfSelectedCount(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( GetListCtrl().GetSelectedCount() );
}

/*
void CExcerptView::OnUpdateIfItemCount(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable( GetListCtrl().GetItemCount() );
}
*/

void CExcerptView::OnViewRefresh() 
{
	CMagicDoc *doc = (CMagicDoc*) GetDocument();
	if( doc ) doc->Check();
}

void CExcerptView::OnStopChecking() 
{
	CMagicDoc *doc = (CMagicDoc*) GetDocument(); 
	if( doc ) doc->StopChecking();
}

void CExcerptView::OnQuickView()
{
	CListCtrl &list = GetListCtrl();

	for( int i = list.GetItemCount(); i; --i )
	{
		if( LVNI_SELECTED == list.GetItemState( i-1, LVNI_SELECTED ) )
		{
			( (CExcerpt*) list.GetItemData( i-1 ) )->QuickView();
		}
	}
}

void CExcerptView::OnQuickReply()
{
	CListCtrl &list = GetListCtrl();

	CString strRcpt;
	CString strSubject;

	int i = list.GetItemCount();
	while( i-- )
	{
		if( LVNI_SELECTED == list.GetItemState( i, LVNI_SELECTED ) )
		{
			CExcerpt &expt = *( (CExcerpt*) list.GetItemData( i ) );
			if( !strRcpt.IsEmpty() ) strRcpt += _T(",");
			if (expt.m_sReplyTo.IsEmpty())
				strRcpt += expt.m_strFrom;
			else
				strRcpt += expt.m_sReplyTo;
			if( strSubject.IsEmpty() ) strSubject = expt.m_strSubject;
			else
			{
				if( strSubject != expt.m_strSubject ) strSubject = _T("...");
			}
		}
	}

	/* mark subject by "Re: "(-ply) if not already marked */
	if( _tcsnicmp( strSubject, _T("Re: "), 4 ) ) strSubject = _T("Re: ") + strSubject;

	CString strCommand;
	strCommand.Format("mailto:%s?subject=%s", strRcpt, strSubject );

	/* launch mailer now! */
	if( (int) ShellExecute( NULL, _T("open"), strCommand, _T(""), _T(""), SW_NORMAL ) < 32 )
	{
		CString strMessage;
		AfxFormatString1( strMessage, IDP_CANNOT_FOLLOW_THE_LINK_1, strCommand );
		AfxMessageBox( strMessage );
	}
}

void CExcerptView::OnUpdateViewRefresh(CCmdUI* pCmdUI) 
{
	CMagicDoc *doc = (CMagicDoc*) GetDocument(); 
	if( doc ) pCmdUI->Enable( doc->m_listMailbox.GetCount() );
}

void CExcerptView::OnUpdateStopChecking(CCmdUI* pCmdUI) 
{
	CMagicDoc *doc = (CMagicDoc*) GetDocument(); 
	if( doc ) pCmdUI->Enable( doc->m_listMailbox.GetCount() );
}

void CExcerptView::OnUpdateIndicatorObjects( CCmdUI *pCmdUI )
{
	CListCtrl &list = GetListCtrl();
    pCmdUI->Enable(); 

	UINT uintSelected = list.GetSelectedCount();
	UINT uintTotal = list.GetItemCount();
	UINT uintReported = uintSelected ? uintSelected : uintTotal;

    CString strTmp1, strTmp2, strObjects;
	LOAD_STRING(strTmp1, (uintReported -1 ? IDP_MESSAGES : IDP_MESSAGE ) );
	if( uintSelected )
	{
		LOAD_STRING(strTmp2, IDP_SELECTED );
	}
    strObjects.Format( _T("%d %s %s"), uintReported, strTmp1, strTmp2 );
    pCmdUI->SetText( strObjects ); 
}

void CExcerptView::OnUpdateIndicatorContents( CCmdUI *pCmdUI )
{
	CListCtrl &list = GetListCtrl();
    pCmdUI->Enable();
	int intCount = 0;
	int nLoaded = 0;

	BOOL bNoneSelected = !list.GetSelectedCount();

	for( int i = list.GetItemCount(); i; --i )
	{
		if( bNoneSelected || list.GetItemState( i-1, LVIS_SELECTED ) ) 
		{
			intCount += ( (CExcerpt*) list.GetItemData( i-1 ) )->m_intSize;
			nLoaded += ( (CExcerpt*) list.GetItemData( i-1 ) )->m_nLoadedSize;
		}
	}
	
	CString strContents;
	BytesToString( intCount, strContents );
	if (nLoaded && nLoaded<intCount)
	{
		CString s;
		s.Format("%s [%d]", strContents, nLoaded);
		strContents = s;
	}
    pCmdUI->SetText( strContents ); 
}


void CExcerptView::OnQuickDelete() 
{
	if( theApp.intEVConfirmDelete &&
		( IDYES != AfxMessageBox( IDS_DELETE_CNF, MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2 ) ) ) return;

	CListCtrl &list = GetListCtrl();
	for( int i = list.GetItemCount(); i; --i )
	{
		if( list.GetItemState( i-1, LVIS_SELECTED ) ) 
		{
			CExcerpt &xrpt = *( (CExcerpt*) list.GetItemData( i-1 ) );
			xrpt.m_bitRemoveFromServer = 1;
			xrpt.Change( COLUMN_MBOX );
			xrpt.m_pMailbox->Check();
		}
	}
}

void CExcerptView::OnKeydown(NMHDR* pNMHDR, LRESULT* pResult) 
{
	LV_KEYDOWN* pLVKeyDown = (LV_KEYDOWN*)pNMHDR;
	// TODO: Add your control notification handler code here
	m_TitleTip.Hide();
	*pResult = 0;

	switch (pLVKeyDown->wVKey)
	{
		case VK_APPS:
		{
			CListCtrl &list = GetListCtrl();
			
			int iFocusedItem = list.GetNextItem( -1, LVNI_FOCUSED );

			POINT pt = {0};
			if( iFocusedItem != -1 )
			{
				RECT rc = {0};
				list.GetItemRect( iFocusedItem, &rc, LVIR_BOUNDS );

				pt.x = rc.left;
				pt.y = rc.bottom;
			}

			ClientToScreen( &pt );
			ShowContextMenu( pt );
			break;
		}
		case VK_TAB:
		{
			CMagicFrame *frame = (CMagicFrame*) GetParentFrame();
			if( frame )
				frame->SwitchPane();
			break;
		}
		case VK_SPACE:
		case 'S': case 's':
		{
			CListCtrl &list = GetListCtrl();
			BOOL bSpace = (pLVKeyDown->wVKey == VK_SPACE);
			int nRead = -1;
			for( int i = list.GetItemCount(); i; --i )
			{
				if( LVNI_SELECTED == list.GetItemState( i-1, LVNI_SELECTED ) )
				{
					CExcerpt* pEx = ( (CExcerpt*) list.GetItemData( i-1 ) );
					if (!pEx)
						continue;
					if (bSpace)
					{
						if (nRead == -1)
							nRead = (pEx->m_bitWasRead == 0);
						pEx->MarkAsRead(nRead);
					}
					else
					{
						if (nRead == -1)
							nRead = (pEx->m_dwFiltered & MFA_SPAM_MAN)==0;
						pEx->MarkAsSpam(nRead);
					}
				}
			}
			break;
		}
	}
}

void CExcerptView::ShowContextMenu( const POINT& pt ) 
{
	CMenu menuPopup;
	VERIFY( menuPopup.LoadMenu( IDR_EXCERPT_POPUP_MENU ) );

	// set default state
	UINT nID = ID_QUICK_VIEW;
	if (theApp.intDblAction == ACT_PROPS)
		nID = ID_EDIT_PROPERTIES;
	else if (theApp.intDblAction == ACT_PREVIEW)
		nID = ID_TEXT_PREVIEW;
	else if (theApp.intDblAction == ACT_ASTEXT)
		nID = ID_QUICKTEXT;
	else
		nID = 0;

	if (nID)
	{
		MENUITEMINFO info;
		info.cbSize = sizeof( info );
		info.fMask = MIIM_STATE;
		info.fState = MFS_DEFAULT;
		VERIFY( SetMenuItemInfo( menuPopup.m_hMenu, nID, FALSE, &info ) );
	}

	MenuTranslate(menuPopup.GetSubMenu(0)->m_hMenu);
	menuPopup.GetSubMenu(0)->TrackPopupMenu( 
		TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, 
		pt.x, pt.y, AfxGetMainWnd(), NULL );
}

void CExcerptView::OnLoad() 
{
	CListCtrl &list = GetListCtrl();

	for( int i = list.GetItemCount(); i; --i )
	{
		if( LVNI_SELECTED == list.GetItemState( i-1, LVNI_SELECTED ) )
		{
			( (CExcerpt*) list.GetItemData( i-1 ) )->QuickLoad();
		}
	}
}


void CExcerptView::OnQuicktext() 
{
	CListCtrl &list = GetListCtrl();

	for( int i = list.GetItemCount(); i; --i )
	{
		if( LVNI_SELECTED == list.GetItemState( i-1, LVNI_SELECTED ) )
		{
			( (CExcerpt*) list.GetItemData( i-1 ) )->QuickText();
		}
	}

⌨️ 快捷键说明

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