mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
8.8 KiB
302 lines
8.8 KiB
// DfrgCtl.h : Declaration of the CDfrgCtl
|
|
|
|
#ifndef __DFRGCTL_H_
|
|
#define __DFRGCTL_H_
|
|
|
|
#pragma warning( disable: 4530 )
|
|
|
|
|
|
#include "resource.h" // main symbols
|
|
#include "ESButton.h"
|
|
#include "ListView.h"
|
|
#include "graphix.h"
|
|
#include <vector>
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CDfrgCtl
|
|
class ATL_NO_VTABLE CDfrgCtl :
|
|
public CComObjectRootEx<CComSingleThreadModel>
|
|
,public CComCoClass<CDfrgCtl, &CLSID_DfrgCtl>
|
|
,public CComControl<CDfrgCtl>
|
|
,public CStockPropImpl<CDfrgCtl, IDfrgCtl, &IID_IDfrgCtl, &LIBID_DFRGUILib>
|
|
,public IProvideClassInfo2Impl<&CLSID_DfrgCtl, NULL, &LIBID_DFRGUILib> // needed
|
|
,public IPersistStreamInitImpl<CDfrgCtl>
|
|
,public IPersistStorageImpl<CDfrgCtl>
|
|
,public IQuickActivateImpl<CDfrgCtl>
|
|
,public IOleControlImpl<CDfrgCtl> // needed
|
|
,public IOleObjectImpl<CDfrgCtl> // needed
|
|
,public IOleInPlaceActiveObjectImpl<CDfrgCtl>
|
|
,public IViewObjectExImpl<CDfrgCtl>
|
|
,public IOleInPlaceObjectWindowlessImpl<CDfrgCtl>
|
|
,public IDataObjectImpl<CDfrgCtl>
|
|
,public ISupportErrorInfo
|
|
,public ISpecifyPropertyPagesImpl<CDfrgCtl>
|
|
,public IConnectionPointContainerImpl<CDfrgCtl>
|
|
,public IConnectionPointImpl<CDfrgCtl,&IID_IDfrgEvents>
|
|
{
|
|
public:
|
|
CDfrgCtl();
|
|
virtual ~CDfrgCtl();
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_DFRGCTL)
|
|
|
|
BEGIN_COM_MAP(CDfrgCtl)
|
|
COM_INTERFACE_ENTRY(IDfrgCtl)
|
|
COM_INTERFACE_ENTRY(IDispatch)
|
|
COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
|
|
COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
|
|
COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
|
|
COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
|
|
COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless)
|
|
COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
|
|
COM_INTERFACE_ENTRY_IMPL(IOleControl)
|
|
COM_INTERFACE_ENTRY_IMPL(IOleObject)
|
|
COM_INTERFACE_ENTRY_IMPL(IQuickActivate)
|
|
COM_INTERFACE_ENTRY_IMPL(IPersistStorage)
|
|
COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
|
|
COM_INTERFACE_ENTRY(IProvideClassInfo)
|
|
COM_INTERFACE_ENTRY(IProvideClassInfo2)
|
|
COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
|
|
COM_INTERFACE_ENTRY_IMPL(IDataObject)
|
|
COM_INTERFACE_ENTRY(ISupportErrorInfo)
|
|
COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages)
|
|
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
|
|
END_COM_MAP()
|
|
|
|
BEGIN_PROPERTY_MAP(CDfrgCtl)
|
|
// Example entries
|
|
// PROP_ENTRY("Property Description", dispid, clsid)
|
|
PROP_PAGE(CLSID_StockColorPage)
|
|
END_PROPERTY_MAP()
|
|
|
|
|
|
BEGIN_MSG_MAP(CDfrgCtl)
|
|
MESSAGE_HANDLER(WM_PAINT, OnPaint)
|
|
MESSAGE_HANDLER(WM_SIZE, OnSize)
|
|
MESSAGE_HANDLER(WM_NOTIFY, OnNotify)
|
|
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
|
|
MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
|
|
MESSAGE_HANDLER(WM_TIMER, OnTimer)
|
|
MESSAGE_HANDLER(WM_COMMAND, OnCommand)
|
|
MESSAGE_HANDLER(WM_CLOSE, OnClose)
|
|
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
|
|
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
|
|
END_MSG_MAP()
|
|
|
|
BEGIN_CONNECTION_POINT_MAP(CDfrgCtl)
|
|
CONNECTION_POINT_ENTRY(IID_IDfrgEvents)
|
|
END_CONNECTION_POINT_MAP()
|
|
|
|
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
|
|
|
|
// IViewObjectEx
|
|
STDMETHOD(GetViewStatus)(DWORD* pdwStatus)
|
|
{
|
|
ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n"));
|
|
*pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE;
|
|
return S_OK;
|
|
}
|
|
|
|
// IDfrgCtl
|
|
public:
|
|
STDMETHOD(get_IsVolListLocked)(/*[out, retval]*/ BOOL *pVal);
|
|
STDMETHOD(get_IsDefragInProcess)(/*[out, retval]*/ BOOL *pVal);
|
|
STDMETHOD(get_IsEngineRunning)(/*[out, retval]*/ BOOL *pVal);
|
|
STDMETHOD(get_IsEnginePaused)(/*[out, retval]*/ BOOL *pVal);
|
|
STDMETHOD(get_ReportStatus)(/*[out, retval]*/ BOOL *pVal);
|
|
STDMETHOD(get_EngineState)(/*[out, retval]*/ short *pVal);
|
|
HRESULT OnNotify(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT OnCommand(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT OnSizing(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT OnExitSizeMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT OnEraseBkgnd(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT SizeWindow();
|
|
HRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT OnFontChange(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT OnContextMenu(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
HRESULT RefreshListViewRow(CVolume *pVolume);
|
|
#ifdef ESI_PROGRESS_BAR
|
|
void InvalidateProgressBar(void);
|
|
#endif
|
|
HRESULT OnTimer(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& lResult);
|
|
STDMETHOD(get_Command)(/*[out, retval]*/ short *pVal);
|
|
STDMETHOD(put_Command)(/*[in]*/ short newVal);
|
|
|
|
HRESULT CreateButtons(void);
|
|
BOOL PaintClusterMap(IN BOOL bPartialRedraw, HDC WorkDC);
|
|
void InvalidateGraphicsWindow(void);
|
|
BOOL SizeGraphicsWindow(void);
|
|
BOOL DrawButtons(HDC);
|
|
void SizeLegend(void);
|
|
void SizeButtons(void);
|
|
void SetButtonState(void);
|
|
|
|
HRESULT PreviousTab();
|
|
HRESULT NextTab();
|
|
STDMETHOD(TranslateAccelerator)(LPMSG pMsg);
|
|
|
|
LRESULT OnSetFocus(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
|
LRESULT OnKillFocus(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
|
|
|
|
//
|
|
// Status change handler.
|
|
//
|
|
void SendStatusChange( LPCTSTR pszStatus );
|
|
|
|
//
|
|
// Send to advises when control has changed OKToRun property.
|
|
//
|
|
void SendOKToRun( BOOL bOK );
|
|
|
|
// these are public cause they are used by the PostMsg
|
|
public:
|
|
STDMETHOD(get_Enabled)(/*[out, retval]*/ BOOL *pVal);
|
|
STDMETHOD(put_Enabled)(/*[in]*/ BOOL newVal);
|
|
STDMETHOD(get_IsOkToRun)(/*[out, retval]*/ BOOL *pVal);
|
|
BOOL m_bPartialRedraw;
|
|
|
|
// the graphics wells
|
|
RECT rcAnalyzeDisp;
|
|
RECT rcDefragDisp;
|
|
|
|
/////////////////////////////////
|
|
// The volume list container
|
|
// is public so that PostMessageLocal can see it
|
|
/////////////////////////////////
|
|
CVolList m_VolumeList;
|
|
|
|
private:
|
|
// used to prevent more than one instance of the control from running
|
|
BOOL m_bStart;
|
|
BOOL m_bNeedMultiInstanceMessage;
|
|
BOOL m_bNeedIllegalVolumeMessage;
|
|
DWORD m_dwInstanceRegister;
|
|
|
|
BOOL m_IsOkToRun;
|
|
HANDLE m_hIsOkToRunSemaphore;
|
|
HFONT m_hFont;
|
|
UINT m_FontHeight;
|
|
UINT GetStringWidth(PTCHAR stringBuf, HDC WorkDC);
|
|
BOOL IsOnlyInstance();
|
|
|
|
/////////////////////////////////
|
|
// The entire graphics area
|
|
/////////////////////////////////
|
|
BOOL DrawSingleInstanceScreen(HDC);
|
|
RECT m_rcCtlRect;
|
|
int m_Margin;
|
|
|
|
/////////////////////////////////
|
|
// Progress Bar
|
|
/////////////////////////////////
|
|
#ifdef ESI_PROGRESS_BAR
|
|
BOOL DrawProgressBar(HDC);
|
|
RECT rcProgressBarBG;
|
|
RECT rcProgressBar;
|
|
BOOL m_IsProgressBarMoved;
|
|
int m_ProgressBarOffset; // offset top and bottom in legend window
|
|
int m_ProgressBarLength;
|
|
#endif
|
|
|
|
/////////////////////////////////
|
|
// Legend
|
|
/////////////////////////////////
|
|
BOOL DrawLegend(HDC);
|
|
RECT rcLegendBG;
|
|
int m_LegendTextWidth; // length of all the text if on 1 line
|
|
int m_LegendGraphicSpacer;
|
|
int m_LegendHeight;
|
|
int m_LegendTextSpacer;
|
|
int m_LegendTopSpace;
|
|
int m_EtchedLineOffset;
|
|
int m_BitmapVOffset; // space above and below the legend bitmaps
|
|
|
|
/////////////////////////////////
|
|
// Graphics Area
|
|
/////////////////////////////////
|
|
BOOL PaintGraphicsWindow(HDC);
|
|
RECT rcGraphicsBG; // total BG
|
|
|
|
// borders around the graphic wells
|
|
RECT rcAnalyzeBorder;
|
|
RECT rcDefragBorder;
|
|
UINT m_GraphicWellSpacer;
|
|
UINT m_GraphicWellHeight;
|
|
|
|
/////////////////////////////////
|
|
// Buttons
|
|
/////////////////////////////////
|
|
BOOL m_ButtonsLocked;
|
|
|
|
RECT rcButtonBG;
|
|
|
|
// position of the buttons
|
|
// in absolute coodinates
|
|
RECT rcDefragButton;
|
|
RECT rcAnalyzeButton;
|
|
RECT rcPauseButton;
|
|
RECT rcCancelButton;
|
|
RECT rcReportButton;
|
|
|
|
// the buttons
|
|
HRESULT DestroyButtons(void);
|
|
BOOL m_bHaveButtons;
|
|
UINT m_ButtonTopBottomSpacer;
|
|
UINT m_ButtonHeight;
|
|
UINT m_ButtonWidth;
|
|
UINT m_ButtonSpacer;
|
|
ESButton* m_pAnalyzeButton;
|
|
ESButton* m_pDefragButton;
|
|
ESButton* m_pPauseButton;
|
|
ESButton* m_pStopButton;
|
|
ESButton* m_pReportButton;
|
|
HRESULT HandleEnterKeyPress();
|
|
|
|
/////////////////////////////////
|
|
// Listview
|
|
/////////////////////////////////
|
|
CESIListView m_ListView;
|
|
RECT rcListView;
|
|
|
|
// Pointer to CBmp class that holds all the legend bitmap squares
|
|
CBmp* m_pLegend;
|
|
|
|
struct legendData {
|
|
int length; // length of legend text plus bitmap plus spacers
|
|
VString text; // legend entry text
|
|
RECT rcBmp; // rectangle that defines location of bitmap
|
|
} m_LegendData[7];
|
|
|
|
};
|
|
|
|
using namespace std;
|
|
typedef vector< HWND, allocator<HWND> > HWNDVECTOR;
|
|
|
|
class CTabEnumerator
|
|
{
|
|
public:
|
|
CTabEnumerator( HWND hWndParent, bool fForward )
|
|
{
|
|
m_hWndParent = hWndParent;
|
|
m_fForward = fForward;
|
|
};
|
|
|
|
HWND GetNextTabWindow();
|
|
void AddChild( HWND hWnd )
|
|
{
|
|
//
|
|
// Only add this if it is a top-level child.
|
|
//
|
|
if ( GetParent( hWnd ) == m_hWndParent && IsWindowEnabled( hWnd ) )
|
|
m_Children.push_back( hWnd );
|
|
}
|
|
|
|
protected:
|
|
HWND m_hWndParent;
|
|
HWNDVECTOR m_Children;
|
|
bool m_fForward;
|
|
};
|
|
|
|
#endif //__DFRGCTL_H_
|