455 lines
11 KiB
C++
455 lines
11 KiB
C++
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright (c) 1996-1999 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)
|
||
|
{
|
||
|
if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)
|
||
|
return -1;
|
||
|
|
||
|
if (!m_wndToolBar.Create(this) ||
|
||
|
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
|
||
|
{
|
||
|
Trace(g_tagMainFrame, _T("Failed to create toolbar"));
|
||
|
return -1; // 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"));
|
||
|
return -1; // 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
|
||
|
|
||
|
return 0;
|
||
|
|
||
|
} //*** 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;
|
||
|
|
||
|
if (nValueNum <= 1)
|
||
|
strValueName = REGPARAM_WINDOW_POS;
|
||
|
else
|
||
|
strValueName.Format(REGPARAM_WINDOW_POS _T("-%d"), nValueNum);
|
||
|
|
||
|
strBuffer = AfxGetApp()->GetProfileString(pszSection, strValueName);
|
||
|
if (strBuffer.IsEmpty())
|
||
|
return FALSE;
|
||
|
|
||
|
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)
|
||
|
return FALSE;
|
||
|
|
||
|
wp.length = sizeof wp;
|
||
|
*pwp = wp;
|
||
|
return TRUE;
|
||
|
|
||
|
} //*** 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;
|
||
|
|
||
|
if (nValueNum <= 1)
|
||
|
strValueName = REGPARAM_WINDOW_POS;
|
||
|
else
|
||
|
strValueName.Format(REGPARAM_WINDOW_POS _T("-%d"), nValueNum);
|
||
|
|
||
|
wsprintf(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()
|