|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-2002 Microsoft Corporation
//
// Module Name:
// MainFrm.cpp
//
// Abstract:
// Implementation of the CMainFrame class.
//
// Author:
// David Potter (davidp) May 1, 1996
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CluAdmin.h"
#include "ConstDef.h"
#include "MainFrm.h"
#include "TraceTag.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// Global Variables
/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
CTraceTag g_tagMainFrame(TEXT("UI"), TEXT("MAIN FRAME"), 0); #endif
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNAMIC(CMainFrame, CMDIFrameWnd)
static UINT indicators[] = { ID_SEPARATOR, // status line indicator
ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };
/////////////////////////////////////////////////////////////////////////////
// Message Maps
BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd) //{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE() ON_WM_CLOSE() //}}AFX_MSG_MAP
// Global help commands
ON_COMMAND(ID_HELP_FINDER, OnHelp) ON_COMMAND(ID_HELP, OnHelp) ON_COMMAND(ID_CONTEXT_HELP, OnHelp) ON_COMMAND(ID_DEFAULT_HELP, OnHelp) ON_MESSAGE(WM_CAM_RESTORE_DESKTOP, OnRestoreDesktop) ON_MESSAGE(WM_CAM_CLUSTER_NOTIFY, OnClusterNotify) END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CMainFrame::CMainFrame
//
// Routine Description:
// Default construtor.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
CMainFrame::CMainFrame(void) { } //*** CMainFrame::CMainFrame()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CMainFrame::OnCreate
//
// Routine Description:
// Handler for the WM_CREATE message. Create the contents of the frame,
// including toolbars, status bars, etc.
//
// Arguments:
// lpCreateStruct Pointer to a CREATESTRUCT.
//
// Return Value:
// -1 Failed to create.
// 0 Created successfully.
//
//--
/////////////////////////////////////////////////////////////////////////////
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { int nCreateStatus = -1;
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) { goto Cleanup; } if (!m_wndToolBar.Create(this) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { Trace(g_tagMainFrame, _T("Failed to create toolbar")); goto Cleanup; // fail to create
}
if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators( indicators, sizeof(indicators)/sizeof(UINT) )) { Trace(g_tagMainFrame, _T("Failed to create status bar")); goto Cleanup; // fail to create
}
// TODO: Remove this if you don't want tool tips or a resizeable toolbar
m_wndToolBar.SetBarStyle( m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC );
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar);
// Hide the toolbar and/or status bar is that is the current setting.
{ BOOL bShowToolBar; BOOL bShowStatusBar;
// Read the settings from the user's profile.
bShowToolBar = AfxGetApp()->GetProfileInt( REGPARAM_SETTINGS, REGPARAM_SHOW_TOOL_BAR, TRUE ); bShowStatusBar = AfxGetApp()->GetProfileInt( REGPARAM_SETTINGS, REGPARAM_SHOW_STATUS_BAR, TRUE );
// Show or hide the toolbar and status bar.
m_wndToolBar.ShowWindow(bShowToolBar); m_wndStatusBar.ShowWindow(bShowStatusBar); } // Hide the toolbar and/or status bar is that is the current setting
nCreateStatus = 0;
Cleanup:
return nCreateStatus;
} //*** CMainFrame::OnCreate()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CMainFrame::GetMessageString
//
// Routine Description:
// Get a string for a command ID.
//
// Arguments:
// nID [IN] Command ID for which a string should be returned.
// rMessage [OUT] String in which to return the message.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CMainFrame::GetMessageString(UINT nID, CString& rMessage) const { CFrameWnd * pframe;
// Pass off to the active MDI child frame window, if there is one.
pframe = MDIGetActive(); if (pframe == NULL) { CMDIFrameWnd::GetMessageString(nID, rMessage); } else { pframe->GetMessageString(nID, rMessage); }
} //*** CMainFrame::GetMessageString()
/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics
/////////////////////////////////////////////////////////////////////////////
#ifdef _DEBUG
void CMainFrame::AssertValid(void) const { CMDIFrameWnd::AssertValid();
} //*** CMainFrame::AssertValid()
void CMainFrame::Dump(CDumpContext& dc) const { CMDIFrameWnd::Dump(dc);
} //*** CMainFrame::Dump()
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
//++
//
// CMainFrame::OnClusterNotify
//
// Routine Description:
// Handler for the WM_CAM_CLUSTER_NOTIFY message.
// Processes cluster notifications.
//
// Arguments:
// None.
//
// Return Value:
// Value returned from the application method.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CMainFrame::OnClose(void) { // Save the current window position and size.
{ WINDOWPLACEMENT wp; wp.length = sizeof wp; if (GetWindowPlacement(&wp)) { wp.flags = 0; if (IsZoomed()) { wp.flags |= WPF_RESTORETOMAXIMIZED; } if (IsIconic()) { wp.showCmd = SW_SHOWMINNOACTIVE; }
// and write it to the .INI file
WriteWindowPlacement(&wp, REGPARAM_SETTINGS, 0); } // if: window placement retrieved successfully
} // Save the current window position and size
// Save the current connections.
GetClusterAdminApp()->SaveConnections();
// Save the current toolbar and status bar show state.
AfxGetApp()->WriteProfileInt( REGPARAM_SETTINGS, REGPARAM_SHOW_TOOL_BAR, ((m_wndToolBar.GetStyle() & WS_VISIBLE) ? TRUE : FALSE) ); AfxGetApp()->WriteProfileInt( REGPARAM_SETTINGS, REGPARAM_SHOW_STATUS_BAR, ((m_wndStatusBar.GetStyle() & WS_VISIBLE) ? TRUE : FALSE) );
CMDIFrameWnd::OnClose();
} //*** CMainFrame::OnClose()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CMainFrame::OnRestoreDesktop
//
// Routine Description:
// Handler for the WM_CAM_RESTORE_DESKTOP message.
// Restores the desktop from the saved parameters.
//
// Arguments:
// wparam 1st parameter.
// lparam 2nd parameter.
//
// Return Value:
// Value returned from the application method.
//
//--
/////////////////////////////////////////////////////////////////////////////
LRESULT CMainFrame::OnRestoreDesktop(WPARAM wparam, LPARAM lparam) { // Call this method on the application.
return GetClusterAdminApp()->OnRestoreDesktop(wparam, lparam);
} //*** CMainFrame::OnRestoreDesktop()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CMainFrame::OnClusterNotify
//
// Routine Description:
// Handler for the WM_CAM_CLUSTER_NOTIFY message.
// Processes cluster notifications.
//
// Arguments:
// wparam 1st parameter.
// lparam 2nd parameter.
//
// Return Value:
// Value returned from the application method.
//
//--
/////////////////////////////////////////////////////////////////////////////
LRESULT CMainFrame::OnClusterNotify(WPARAM wparam, LPARAM lparam) { CClusterAdminApp * papp = GetClusterAdminApp();
// Call this method on the application.
return papp->OnClusterNotify(wparam, lparam);
} //*** CMainFrame::OnClusterNotify()
/////////////////////////////////////////////////////////////////////////////
//++
//
// CMainFrame::OnHelp
//
// Routine Description:
// Handler for the IDM_HELP_FINDER menu command.
//
// Arguments:
// None.
//
// Return Value:
// None.
//
//--
/////////////////////////////////////////////////////////////////////////////
void CMainFrame::OnHelp(void) { HtmlHelpW( m_hWnd, _T("MSCSConcepts.chm"), HH_DISPLAY_TOPIC, 0L );
} //*** CMainFrame::OnHelp()
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
// Helpers for saving/restoring window state
static TCHAR g_szFormat[] = _T("%u,%u,%d,%d,%d,%d,%d,%d,%d,%d");
/////////////////////////////////////////////////////////////////////////////
//++
//
// ReadWindowPlacement
//
// Routine Description:
// Read window placement parameters.
//
// Arguments:
// pwp [OUT] WINDOWPLACEMENT structure to fill.
// pszSection [IN] Section name under which to read data.
// nValueNum [IN] Number of the value to read.
//
// Return Value:
// TRUE Parameters read.
// FALSE Parameters not read.
//
//--
/////////////////////////////////////////////////////////////////////////////
BOOL ReadWindowPlacement( OUT LPWINDOWPLACEMENT pwp, IN LPCTSTR pszSection, IN DWORD nValueNum ) { CString strBuffer; CString strValueName; BOOL bParametersRead = FALSE;
if (nValueNum <= 1) { strValueName = REGPARAM_WINDOW_POS; } else { strValueName.Format(REGPARAM_WINDOW_POS _T("-%d"), nValueNum); }
strBuffer = AfxGetApp()->GetProfileString(pszSection, strValueName); if (strBuffer.IsEmpty()) { goto Cleanup; }
WINDOWPLACEMENT wp; int nRead = _stscanf(strBuffer, g_szFormat, &wp.flags, &wp.showCmd, &wp.ptMinPosition.x, &wp.ptMinPosition.y, &wp.ptMaxPosition.x, &wp.ptMaxPosition.y, &wp.rcNormalPosition.left, &wp.rcNormalPosition.top, &wp.rcNormalPosition.right, &wp.rcNormalPosition.bottom);
if (nRead != 10) { goto Cleanup; }
wp.length = sizeof wp; *pwp = wp; bParametersRead = TRUE;
Cleanup:
return bParametersRead;
} //*** ReadWindowPlacement()
/////////////////////////////////////////////////////////////////////////////
//++
//
// WriteWindowPlacement
//
// Routine Description:
// Write window placement parameters.
//
// Arguments:
// pwp [IN] WINDOWPLACEMENT structure to save.
// pszSection [IN] Section name under which to write data.
// nValueNum [IN] Number of the value to write.
//
// Return Value:
// TRUE Parameters read.
// FALSE Parameters not read.
//
//--
/////////////////////////////////////////////////////////////////////////////
void WriteWindowPlacement( IN const LPWINDOWPLACEMENT pwp, IN LPCTSTR pszSection, IN DWORD nValueNum ) { TCHAR szBuffer[sizeof("-32767")*8 + sizeof("65535")*2]; CString strBuffer; CString strValueName; HRESULT hr;
if (nValueNum <= 1) strValueName = REGPARAM_WINDOW_POS; else strValueName.Format(REGPARAM_WINDOW_POS _T("-%d"), nValueNum);
hr = StringCchPrintf(szBuffer, RTL_NUMBER_OF( szBuffer ), g_szFormat, pwp->flags, pwp->showCmd, pwp->ptMinPosition.x, pwp->ptMinPosition.y, pwp->ptMaxPosition.x, pwp->ptMaxPosition.y, pwp->rcNormalPosition.left, pwp->rcNormalPosition.top, pwp->rcNormalPosition.right, pwp->rcNormalPosition.bottom); AfxGetApp()->WriteProfileString(pszSection, strValueName, szBuffer);
} //*** WriteWindowPlacement()
|