/**********************************************************************/ /** 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