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

📄 magicframe.cpp

📁 强大易用的邮件收发客户端
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// Copyright (C) 1997-2002 Valeriy Ovechkin
// 
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
// 
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
// MagicFrame.cpp : implementation of the CMagicFrame class
//
/////////////////////////////////////////////////////////////////////
//
//   File : MagicFrame.cpp
//   Description : Main frame
//
//   Modification history ( date, name, description ) : 
//		1.	17.12.2002	Igor Green, mmm3@grigsoft.com
//			Fixed toolbar problem
//
//HISTORY_ENTRY_END:1!17.12.2002
/////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Magic.h"
#include "Mailbox.h"
#include "Excerpt.h"
#include "MagicDoc.h"
#include "MailboxView.h"
#include "ExcerptView.h"
#include "OptionsPage.h"
#include "CommandPage.h"
#include "PlaybackPage.h"
#include "MagicFrame.h"
#include "resrc1.h"
#include "getwinver.h"
#include "tools.h"
#include "advoptionspage.h"
#include "enbitmap.h"
#include "actppage.h"
#include "cregexp.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMagicFrame

IMPLEMENT_DYNCREATE(CMagicFrame, CFrameWnd)

const UINT WM_TASKBARCREATED = 
    ::RegisterWindowMessage(_T("TaskbarCreated"));

BEGIN_MESSAGE_MAP(CMagicFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMagicFrame)
	ON_WM_CREATE()
	ON_WM_TIMER()
	ON_COMMAND(ID_RESTORE, OnRestore)
	ON_UPDATE_COMMAND_UI(ID_RESTORE, OnUpdateRestore)
	ON_COMMAND(ID_PREFERENCES, OnPreferences)
	ON_WM_ENTERIDLE()
	ON_COMMAND(ID_QUICK_SEND, OnQuickSend)
	ON_COMMAND(ID_SUSPEND, OnSuspend)
	ON_UPDATE_COMMAND_UI(ID_SUSPEND, OnUpdateSuspend)
	ON_WM_ENDSESSION()
	ON_UPDATE_COMMAND_UI(IDC_FIRST_LANGUAGE, OnUpdateFirstLanguage)
	ON_COMMAND(ID_FILE_APPLYFILTERS, OnFileApplyfilters)
	ON_COMMAND(ID_FRIENDS, OnFriends)
	ON_WM_CLOSE()
	ON_WM_INITMENUPOPUP()
	ON_COMMAND(ID_VIEW_DEL_LOG, OnViewDelLog)
	ON_COMMAND(ID_KILL_SPAM, OnKillSpam)
	ON_COMMAND(ID_TEST_RE, OnTestRe)
	ON_COMMAND(ID_FILTERS, OnFilters)
	ON_WM_COPYDATA()
	ON_WM_QUERYENDSESSION()
	//}}AFX_MSG_MAP
	ON_COMMAND_RANGE(IDC_FIRST_LANGUAGE, IDC_LAST_LANGUAGE, OnLanguageSelect)
	ON_COMMAND_EX(ID_VIEW_STATUS_BAR, OnMyBarCheck)
	ON_COMMAND_EX(ID_VIEW_TOOLBAR, OnMyBarCheck)

	ON_WM_SYSCOMMAND()
	ON_WM_ENTERMENULOOP()
	ON_WM_EXITMENULOOP()
	ON_WM_ACTIVATE()

	ON_MESSAGE( VM_TASKBAR_NOTIFICATION, OnTaskbarNotification )
	ON_MESSAGE( VM_END_RESOLVE_HOST_BY_NAME, OnEndResolveHostByName )
	ON_MESSAGE( VM_START_COMMAND, OnStartCommand )
	ON_MESSAGE( VM_START_PLAYBACK, OnStartPlayback )
	ON_MESSAGE( VM_START_MESSAGE, OnStartMessage )
	ON_MESSAGE( VM_TEST_MESSAGE, OnTestMessage )
	
	ON_MESSAGE( VM_UPDATEITEM, OnUpdateItem )
	ON_MESSAGE( MM_MCINOTIFY, OnMciNotify )

	ON_COMMAND( ID_HELP_FINDER, CFrameWnd::OnHelpFinder )
	ON_COMMAND( ID_HELP, CFrameWnd::OnHelp )
	ON_COMMAND( ID_CONTEXT_HELP, CFrameWnd::OnContextHelp )
	ON_COMMAND( ID_DEFAULT_HELP, CFrameWnd::OnHelpFinder )

	ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)
	ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)
	ON_REGISTERED_MESSAGE( WM_TASKBARCREATED, OnTaskBarCreated )
END_MESSAGE_MAP()

static UINT indicators_when_menu[] =
{
	ID_SEPARATOR,           // status line indicator
};

static UINT indicators_when_no_menu[] =
{
	ID_INDICATOR_OBJECTS,
	ID_INDICATOR_CONTENTS,
};

/////////////////////////////////////////////////////////////////////////////
// CMagicFrame construction/destruction

CMagicFrame::CMagicFrame()
:	m_bIsAlternativeIcon( true ),
	m_uintTimer( 0 ),
	m_bFlashNewMail( false )
{
	m_bListReady = FALSE;
}

CMagicFrame::~CMagicFrame()
{
}

LRESULT CMagicFrame::OnTaskBarCreated( WPARAM, LPARAM )
{
	// install the taskbar icon
	m_nidA.cbSize = sizeof( NOTIFYICONDATA );
	m_nidA.hWnd = m_hWnd;
	m_nidA.uID = 1;
	m_nidA.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	m_nidA.uCallbackMessage = VM_TASKBAR_NOTIFICATION;
	m_nidA.hIcon = m_hMailboxEmpty16;
	m_nidA.szTip[0] = 0;
	VERIFY( Shell_NotifyIcon( NIM_ADD, &m_nidA ) );

	return 0;
}

void CMagicFrame::SetIndicators( BOOL bMenuIsOn )
{
	UINT nID, nStyle;
	int cxWidth;

	if( bMenuIsOn )
	{
		m_wndStatusBar.SetIndicators( indicators_when_menu, sizeof(indicators_when_menu)/sizeof(UINT) );
		m_wndStatusBar.GetPaneInfo( 0, nID, nStyle, cxWidth );
		m_wndStatusBar.SetPaneInfo( 0, nID, SBPS_STRETCH | SBPS_NOBORDERS, cxWidth );
	}
	else
	{
		m_wndStatusBar.SetIndicators( indicators_when_no_menu, sizeof(indicators_when_no_menu)/sizeof(UINT));
		m_wndStatusBar.GetPaneInfo( 0, nID, nStyle, cxWidth );
		m_wndStatusBar.SetPaneInfo( 0, nID, SBPS_NORMAL, 128 );

		m_wndStatusBar.GetPaneInfo( 1, nID, nStyle, cxWidth );
		m_wndStatusBar.SetPaneInfo( 1, nID, SBPS_STRETCH | SBPS_NORMAL, 128 );
	}
}

CImageList ToolbarImages;
CEnBitmap	bmToolbar;
CImageList ToolbarImagesD;
int CMagicFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if ( -1 == CFrameWnd::OnCreate(lpCreateStruct) ) return -1;

	m_hMailboxFull = theApp.m_imgMailbox.ExtractIcon(II_FULL);//theApp.LoadIcon( IDI_MAILBOX_FULL );
	m_hMailboxEmpty = theApp.m_imgMailbox.ExtractIcon(II_EMPTY);//theApp.LoadIcon( IDI_MAILBOX_EMPTY );
	if (theApp.m_nWindowsVersion >= WXP)
	{
		//m_hMailboxFull16 = theApp.LoadIcon( IDI_MAILBOX_FULL );
		//m_hMailboxEmpty16 = theApp.LoadIcon( IDI_MAILBOX_EMPTY );
		m_hMailboxFull16 = theApp.m_imgMailbox.ExtractIcon(II_FULL);
		m_hMailboxEmpty16 = theApp.m_imgMailbox.ExtractIcon(II_EMPTY);
	}
	else
	{
		m_hMailboxFull16 = theApp.LoadIcon( IDI_MAILBOX_FULL_16 );
		m_hMailboxEmpty16 = theApp.LoadIcon( IDI_MAILBOX_EMPTY_16 );
	}
	m_hMailboxSuspended = theApp.LoadIcon( IDR_OVERLAYSUSPENDED );

	// status bar 
	m_wndStatusBar.Create( this );
	SetIndicators( FALSE );

	// tool bar 
	VERIFY( m_wndToolBar.Create( this ) );
	
	m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT);
	m_wndToolBar.LoadToolBar( IDR_TOOLBAR );

	CWindowDC SDC(NULL);  // screen device context
	int nRasterCaps= SDC.GetDeviceCaps(BITSPIXEL);
	if (nRasterCaps>8)
	{
		CSize sz(16, 15);
		// try loading another picture
		CString sBmpFile;
		BOOL bExtFile = FindLocalFile("mmm3glyphs.bmp", sBmpFile, FALSE);
		HANDLE hBitmap = NULL;
		int nColors = 8;
		if (bExtFile)
		{
			hBitmap = ::LoadImage(NULL, sBmpFile, IMAGE_BITMAP, 0, 0,
				LR_LOADFROMFILE);
			if (!hBitmap)
				bExtFile = FALSE;
			BITMAP bmp;
			int nObj = CEnBitmap::GetFileData(sBmpFile, &bmp);
			if (!nObj)
				bExtFile = FALSE;
			else
			{
				sz.cy = bmp.bmHeight;
				if (sz.cy <= 16)
					sz.cx = 16;
				else if (sz.cy==24)
					sz.cx = 24;
				else if (sz.cy==32)
					sz.cx = 32;
				nColors = bmp.bmBitsPixel;
			}
		}
		if (bExtFile && nColors == 32 && (theApp.m_nWindowsVersion < W2K))	// do not allow full color in 9x
			bExtFile = FALSE;
		CEnBitmap bmp;
		if (bExtFile)
		{
			bmp.Attach(CopyImage(hBitmap, IMAGE_BITMAP, 0, 0, LR_COPYRETURNORG));
			bmToolbar.Attach(hBitmap);
		}
		else
		{
			/*
			if (theApp.m_nWindowsVersion < WNTFIRST)
			{
				bmToolbar.LoadBitmap(IDB_TB_98);
				bmp.LoadBitmap(IDB_TB_98);
			}
			else
			*/
			{
				sz.cx = 24;
				sz.cy = 24;
				nColors = 24;
				bmToolbar.LoadBitmap(IDB_FULLCOLORTB);
				bmp.LoadBitmap(IDB_FULLCOLORTB);
			}
		}
		
		if (nColors == 32)
		{
			ToolbarImages.Create(sz.cx, sz.cy, ILC_COLOR32|ILC_MASK, 18, 1);
			if (bmToolbar.ApplyAlpha(GetSysColor(COLOR_BTNFACE)))
				ToolbarImages.Add(&bmToolbar, (CBitmap *)NULL);
			else
				ToolbarImages.Add(&bmToolbar, GetSysColor(COLOR_BTNFACE));
		}
		else
		{
			ToolbarImages.Create(sz.cx, sz.cy, ILC_COLOR24|ILC_MASK, 18, 1);
			ToolbarImages.Add(&bmToolbar, RGB(255, 0, 255));
		}
		CSize sizeButton(sz.cx + 7, sz.cy + 7);
		m_wndToolBar.SetSizes(sizeButton, sz);
		m_wndToolBar.GetToolBarCtrl().SetImageList(&ToolbarImages);
		// disabled images
		if (nColors>8)
			bmp.MakeDisabled32(RGB(255, 0, 255), sz.cx);
		else
			bmp.MakeDisabled(RGB(255, 0, 255), sz.cx);
		if (nColors == 32)
		{
			bmp.ApplyAlpha(GetSysColor(COLOR_BTNFACE));
			ToolbarImagesD.Create(sz.cx, sz.cy, ILC_COLOR32|ILC_MASK, 18, 1);
			ToolbarImagesD.Add(&bmp, (CBitmap *)NULL);
		}
		else
		{
			ToolbarImagesD.Create(sz.cx, sz.cy, ILC_COLOR24|ILC_MASK, 18, 1);
			ToolbarImagesD.Add(&bmp, RGB(255, 0, 255));
		}
		m_wndToolBar.GetToolBarCtrl().SetDisabledImageList(&ToolbarImagesD);
	}

	m_wndToolBar.SetBarStyle( m_wndToolBar.GetBarStyle() | 
		CBRS_TOOLTIPS);

	if (theApp.m_dwFlags & MMF_NO_STATUS)
		m_wndStatusBar.ShowWindow(FALSE);
	if (theApp.m_dwFlags & MMF_NO_TOOLBAR)
		m_wndToolBar.ShowWindow(FALSE);

	// install the taskbar icon
	OnTaskBarCreated( 0, 0 );

	m_uintTimer = SetTimer( 1, 60000, NULL );
	if( !m_uintTimer )
	{
		AfxMessageBox( IDP_TIMER_CREATE_FAILED );
	}

	// kick off the icon animation
	if( theApp.bIsSuspended )
	{
		CreateWatchDog( 1 );
	}

	MenuTranslate(GetMenu()->m_hMenu);

	if( theApp.rcWnd.right )
	{
		WINDOWPLACEMENT wp;
		wp.length = sizeof(WINDOWPLACEMENT);
		wp.flags = 0;
		wp.ptMinPosition.x = -1;
		wp.ptMinPosition.y = -1;
		wp.ptMaxPosition.x = -1;
		wp.ptMaxPosition.y = -1;
		CopyRect(&wp.rcNormalPosition, &theApp.rcWnd);
		if (theApp.intStartAlwaysHidden)
			wp.showCmd = SW_HIDE;
		else if (theApp.m_dwFlags & MMF_MAXIMIZED)
		{
			wp.showCmd = SW_HIDE;	// if we show as maximized now, it loses normal position for some reason
			theApp.m_nCmdShow = SW_SHOWMAXIMIZED;
		}
		else
			wp.showCmd = SW_NORMAL;
		if (theApp.m_dwFlags & MMF_MAXIMIZED && theApp.intStartAlwaysHidden )
			wp.flags = WPF_RESTORETOMAXIMIZED;
		SetWindowPlacement(&wp);
	}

	return 0;
}

/////////////////////////////////////////////////////////////////////////////
// CMagicFrame diagnostics

#ifdef _DEBUG
void CMagicFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMagicFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMagicFrame message handlers

void CMagicFrame::SaveSettings()
{
	WINDOWPLACEMENT wndplMain;
	GetWindowPlacement( &wndplMain );
	theApp.rcWnd = wndplMain.rcNormalPosition;
	BOOL bMax = (wndplMain.showCmd == SW_SHOWMAXIMIZED) || 
				( (wndplMain.showCmd == SW_SHOWMINIMIZED) && wndplMain.flags == WPF_RESTORETOMAXIMIZED);
	SetBoolFlag(theApp.m_dwFlags,  MMF_MAXIMIZED, bMax);

	RECT rc;
	m_wndSplitter.GetPane( 0, 0 )->GetClientRect( &rc );
	theApp.intSplitterPos = rc.bottom;

	// Save/LoadBarState is not compatible, if list of bar is changed
	// Done in OnMyBarCheck
}

BOOL CMagicFrame::DestroyWindow() 
{
	VERIFY( Shell_NotifyIcon( NIM_DELETE, &m_nidA ) );
	KillTimer( m_uintTimer );

	//SaveSettings();

	return CFrameWnd::DestroyWindow();
}

void CMagicFrame::OnTimer(UINT nIDEvent) 
{
	if( m_uintTimer != nIDEvent ) CFrameWnd::OnTimer( nIDEvent );
	else PostMessage( WM_COMMAND, ID_TIMER_CHECK );

⌨️ 快捷键说明

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