?? magicframe.cpp
字號:
// 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 + -