windows-nt/Source/XPSP1/NT/net/mmc/common/statsdlg.h
2020-09-26 16:20:57 +08:00

204 lines
5.3 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1998 **/
/**********************************************************************/
/*
statsdlg.h
Header file for the base class of the Statistics dialogs.
FILE HISTORY:
*/
#ifndef _STATSDLG_H
#define _STATSDLG_H
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#ifndef _DIALOG_H_
#include "dialog.h"
#endif
#ifndef _COLUMN_H
#include "column.h"
#endif
#include "commres.h"
// forward declarations
struct ColumnData;
class ConfigStream;
class CStatsListCtrl : public CListCtrl
{
public:
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
void CopyToClipboard();
DECLARE_MESSAGE_MAP();
};
/*---------------------------------------------------------------------------
These are the available options (they get passed in through
the StatsDialog constructor).
STATSDLG_FULLWINDOW
Makes the list control fill the entire window
STATSDLG_CONTEXTMENU
Provides a context menu over the list control.
STATSDLG_SELECT_COLUMNS
Allows the user the ability to change the available column set
STATSDLG_VERTICAL
The data is displayed with the column headers going vertical rather
than horizontal. The user has to be aware of this when writing the
RefreshData() code.
---------------------------------------------------------------------------*/
#define STATSDLG_FULLWINDOW 0x00000001
#define STATSDLG_CONTEXTMENU 0x00000002
#define STATSDLG_SELECT_COLUMNS 0x00000004
#define STATSDLG_VERTICAL 0x00000008
#define STATSDLG_CLEAR 0x00000010
#define STATSDLG_DEFAULTSORT_ASCENDING 0x00010000
class StatsDialog : public CBaseDialog
{
public:
StatsDialog(DWORD dwOptions);
virtual ~StatsDialog();
HRESULT SetColumnInfo(const ContainerColumnInfo *pColumnInfo, UINT cColumnInfo);
int MapColumnToSubitem(UINT nColumnId);
BOOL IsSubitemVisible(UINT nSubitemId);
int MapSubitemToColumn(UINT nSubitemId);
HANDLE GetSignalEvent()
{ return m_hEventThreadKilled; }
void UnloadHeaders();
void LoadHeaders();
// sets the width of the columns to the maximum of the text
void SetColumnWidths(UINT uNumColumns);
// Posts the command to do a refresh
void PostRefresh();
// Override this to implement the actual insertion of data
virtual HRESULT RefreshData(BOOL fGrabNewData);
// This is called prior to deleting all items from the list control
// This allows for the removal of any private data items
virtual void PreDeleteAllItems();
// Override this to implement sorting
virtual void Sort(UINT nColumn);
// MFC Overrides
virtual BOOL OnInitDialog();
virtual void OnOK();
virtual void OnCancel();
virtual void PostNcDestroy();
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
// Sets the configuration info location and the column id
// for this dialog
void SetConfigInfo(ConfigStream *pConfig, ULONG ulId);
// Sets the preferred size and position
void SetPosition(RECT rc);
void GetPosition(RECT *prc);
virtual HRESULT AddToContextMenu(CMenu* pMenu);
// Deletes all items from the list control
void DeleteAllItems();
// copy data to the clipboard
void CopyData();
//{{AFX_DATA(ColumnDlg)
CStatsListCtrl m_listCtrl;
//}}AFX_DATA
//{{AFX_VIRTUAL(ColumnDlg)
protected:
virtual VOID DoDataExchange(CDataExchange* pDX);
//}}AFX_VIRTUAL
DWORD m_dwOptions;
ConfigStream * m_pConfig;
ULONG m_ulId; // id to be used when saving/getting info
ViewInfo m_viewInfo;
BOOL m_bAfterInitDialog;
BOOL m_fSortDirection;
BOOL m_fDefaultSortDirection;
RECT m_rcPosition;
// These hold the position of the buttons relative to the
// right and bottom of the dialog. They are used to hold
// the resizing information.
RECT m_rcList;
// This holds the minimum size rectangle
SIZE m_sizeMinimum;
// This is used by the thread and the handler (the thread signals
// the handler that it has cleaned up after itself).
HANDLE m_hEventThreadKilled;
protected:
// These hold the position of the buttons relative to the
// right and bottom of the dialog. They are used to hold
// the resizing information.
enum
{
INDEX_CLOSE = 0,
INDEX_REFRESH = 1,
INDEX_SELECT = 2,
INDEX_CLEAR = 3,
INDEX_COUNT = 4, // this is the number of enums
};
struct StatsDialogBtnInfo
{
ULONG m_ulId;
RECT m_rc;
};
StatsDialogBtnInfo m_rgBtn[INDEX_COUNT];
float m_ColWidthMultiple;
DWORD m_ColWidthAdder;
protected:
//{{AFX_MSG(StatsDialog)
virtual afx_msg void OnRefresh();
afx_msg void OnSelectColumns();
afx_msg void OnMove(int x, int y);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnGetMinMaxInfo(MINMAXINFO *pMinMax);
afx_msg void OnContextMenu(CWnd *pWnd, CPoint pos);
afx_msg void OnNotifyListControlClick(NMHDR *pNmHdr, LRESULT *pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP();
};
void CreateNewStatisticsWindow(StatsDialog *pWndStats,
HWND hWndParent,
UINT nIDD);
void WaitForStatisticsWindow(StatsDialog *pWndStats);
#endif // _STATSDLG_H