windows-nt/Source/XPSP1/NT/base/cluster/admin/cluadmin/mainfrm.cpp
2020-09-26 16:20:57 +08:00

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()