NT4/private/utils/windisk/hard/chardmnu.cxx
2020-09-30 17:12:29 +02:00

272 lines
5.6 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1993.
//
// File: chardmnu.cxx
//
// Contents: Disk Administrator extension class for hard disks: menu ops
//
// Classes: CHardMenu
//
// History: 10-May-93 BruceFo Created
//
//----------------------------------------------------------------------------
#include <headers.hxx>
#pragma hdrstop
#include "hardmenu.hxx"
#include "dialogs.h"
#include "global.hxx"
//////////////////////////////////////////////////////////////////////////////
VOID
DoConfigureRAID(
IN HWND hwndParent,
IN PWSTR DeviceName
);
//////////////////////////////////////////////////////////////////////////////
//+---------------------------------------------------------------------------
//
// Method: CHardMenu::CHardMenu
//
// Synopsis: constructor
//
// Effects:
//
// Arguments: [pUnk] --
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Derivation:
//
// Algorithm:
//
// History: 10-May-93 BruceFo Created
//
// Notes:
//
//----------------------------------------------------------------------------
CHardMenu::CHardMenu(
IN IUnknown* pUnk
)
:
m_IUnknown(pUnk)
{
}
//+---------------------------------------------------------------------------
//
// Method: CHardMenu::~CHardMenu
//
// Synopsis:
//
// Effects:
//
// Arguments: (none)
//
// Requires:
//
// Returns:
//
// Signals:
//
// Modifies:
//
// Derivation:
//
// Algorithm:
//
// History: 10-May-93 BruceFo Created
//
// Notes:
//
//----------------------------------------------------------------------------
CHardMenu::~CHardMenu()
{
}
STDMETHODIMP
CHardMenu::QueryInterface(
IN REFIID riid,
OUT LPVOID* ppvObj
)
{
return m_IUnknown->QueryInterface(riid, ppvObj);
}
STDMETHODIMP_(ULONG)
CHardMenu::AddRef(
VOID
)
{
return m_IUnknown->AddRef();
}
STDMETHODIMP_(ULONG)
CHardMenu::Release(
VOID
)
{
return m_IUnknown->Release();
}
//+-------------------------------------------------------------------------
//
// Method: CHardMenu::MenuDispatch
//
// Synopsis: Dispatch routine for Hard disk menu items
//
// Arguments: [hwndParent] -- parent HWND for any UI
// [DeviceName] -- The NT object for the drive, e.g.
// "\Device\Harddisk0"
// [Item] -- Item number of invoked menu. This is the item
// number associated with the menu in the information
// passed to the Disk Administrator in the QueryInfo call.
//
// Returns: HRESULT
//
// History: 11-Jan-94 BruceFo Created
//
// Notes:
//
// item menu choice
// ---- -----------
// 0 Configure RAID
//
//--------------------------------------------------------------------------
HRESULT
CHardMenu::MenuDispatch(
IN HWND hwndParent,
IN LPWSTR DeviceName,
IN UINT Item
)
{
switch (Item)
{
case 0:
daDebugOut((DEB_TRACE, "Configure RAID for %ws\n", DeviceName));
DoConfigureRAID(hwndParent, DeviceName);
break;
default:
daDebugOut((DEB_ERROR,
"Unknown hard disk extension, drive: %ws, menu item: %d\n",
DeviceName,
Item));
break;
}
return S_OK;
}
////////////////////////////////////////////////////////////////////////////
BOOL CALLBACK ConfigDlgProc(HWND, UINT, WPARAM, LPARAM);
VOID
DoConfigureRAID(
IN HWND hwndParent,
IN PWSTR DeviceName
)
{
HINSTANCE hInstanceSpin = LoadLibrary(L"spincube.dll");
int iRet = DialogBoxParam(
g_hInstance,
MAKEINTRESOURCE(IDD_CONFIG),
hwndParent,
ConfigDlgProc,
(LPARAM) g_hInstance
);
if (-1 == iRet)
{
daDebugOut((DEB_ERROR, "Couldn't create the dialog!\n"));
}
FreeLibrary(hInstanceSpin);
}
//+-------------------------------------------------------------------------
//
// Function: ConfigDlgProc, public
//
// Synopsis: Dialog procedure for the mocked-up "Configure RAID" dialog.
//
// Arguments: [hWnd] -- Window handle of the dialog box.
// [wMsg] -- Window message.
// [wParam] -- Message parameter.
// [lParam] -- Message parameter.
//
// Returns: TRUE if message completely processed; FALSE to cause default
// processing.
//
//--------------------------------------------------------------------------
BOOL CALLBACK
ConfigDlgProc( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam )
{
switch (wMsg)
{
case WM_INITDIALOG:
{
//
// Center dialog on screen.
//
RECT rc;
GetWindowRect(hWnd, &rc);
SetWindowPos(
hWnd,
NULL,
(GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left)) / 2,
(GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top)) / 2,
0,
0,
SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER);
return TRUE;
}
case WM_COMMAND:
if (GET_WM_COMMAND_CMD(wParam, lParam) == BN_CLICKED)
{
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDOK:
EndDialog(hWnd, 0);
break;
}
}
break;
case WM_CLOSE:
EndDialog(hWnd,0);
break;
}
return FALSE;
}