Leaked source code of windows server 2003
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.
 
 
 
 
 
 

351 lines
11 KiB

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// comctrls.h
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "FontInfo.H"
#ifndef MDT_COMON_CONTROLS
#define MDT_COMON_CONTROLS 1
/////////////////////////////////////////////////////////////////////////////
// The classes defined below (CEditControlEditBox, CEditControlListBox) are
// used to implement a lighter weight, general purpose Edit control than the
// UFM Editor specific classes that are defined above. (A normal Edit Box is
// part of this Edit Control, too.)
class CEditControlListBox ; // Forward class declaration
/////////////////////////////////////////////////////////////////////////////
// CEditControlEditBox window
class CEditControlEditBox : public CEdit
{
CEditControlListBox* m_pceclb ; // Pointer to related list box control
// Construction
public:
CEditControlEditBox(CEditControlListBox* pceclb) ;
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditControlEditBox)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CEditControlEditBox();
// Generated message map functions
protected:
//{{AFX_MSG(CEditControlEditBox)
afx_msg void OnKillfocus();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// CEditControlListBox window
class CEditControlListBox : public CListBox
{
CEdit* m_pceName ;
CEditControlEditBox* m_pcecebValue ;
bool m_bReady ; // True iff ready for operations
int m_nCurSelIdx ; // Currently selected item's index
// Construction
public:
CEditControlListBox(CEdit* pce, CEditControlEditBox* pceceb) ;
// Attributes
public:
// Operations
public:
bool Init(CStringArray& csamodels, CStringArray& csafiles, int ntabstop) ;
void SaveValue(void) ;
bool GetGPDInfo(CStringArray& csavalues, CStringArray* pcsanames = NULL) ;
void SelectLBEntry(int nidx, bool bsave = false) ;
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CEditControlListBox)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CEditControlListBox();
// Generated message map functions
protected:
//{{AFX_MSG(CEditControlListBox)
afx_msg void OnSelchange();
afx_msg void OnDblclk();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// The classes defined below are for the CFullEditListCtrl and CFELCEditBox
// classes. Together, they support a List Control in Report View
// in which subitems can be edited too, complete rows can be selected, and
// the data can be sorted by numeric or text columns. CFELCEditBox is a
// helper class that is only used by CFullEditListCtrl.
//
/////////////////////////////////////////////////////////////////////////////
// CFELCEditBox Class
class CFELCEditBox : public CEdit
{
// Construction
public:
CFELCEditBox() ;
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFELCEditBox)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CFELCEditBox() ;
// Generated message map functions
protected:
//{{AFX_MSG(CFELCEditBox)
afx_msg void OnKillFocus(CWnd* pNewWnd) ;
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
// The following structure(s), enumeration(s), and definitions are used with
// CFullEditListCtrl.
typedef enum {
COLDATTYPE_INT = 0, COLDATTYPE_STRING, COLDATTYPE_FLOAT, COLDATTYPE_TOGGLE,
COLDATTYPE_CUSTEDIT
} COLDATTYPE ;
typedef struct _COLINFO { // Maintains info on each column
int nwidth ; // The column width
bool beditable ; // True iff the column is editable
COLDATTYPE cdttype ; // The type of data in the column
bool bsortable ; // True iff the rows can be sorted on this column
bool basc ; // True iff the column has been sort ascended
LPCTSTR lpctstrtoggle ; // If toggle type, pointer to toggle string
} COLINFO, *PCOLINFO ;
#define COMPUTECOLWIDTH -1
#define SETWIDTHTOREMAINDER -2
// The following flags are used to indicate the toggle state of the list's
// columns. These values are assigned to m_dwToggleFlags.
#define TF_HASTOGGLECOLUMNS 1 // The list has toggle column(s)
#define TF_CLICKONROW 2 // Dbl-Clking on row toggles single column
#define TF_CLICKONCOLUMN 4 // Must dbl-clk on column (cell) to toggle it
// The following flags are used to indicate which one - if any - of the list's
// column's data may be modified via a custom edit routine in the class'
// owner. These values are assigned to m_dwCustEditFlags.
#define CEF_HASTOGGLECOLUMNS 1 // The list has a custom edit column
#define CEF_CLICKONROW 2 // Dbl-Clking on row activates single column
#define CEF_CLICKONCOLUMN 4 // Must dbl-clk on cell to activate dialog
// Miscellaneous flags used to control the behaviour of CFullEditListCtrl.
// These flags are passed to InitControl() in its dwmiscflags parameter.
#define MF_SENDCHANGEMESSAGE 1 // Send WM_LISTCELLCHANGED messages
#define MF_IGNOREINSERT 2 // Ignore INS key
#define MF_IGNOREDELETE 4 // Ignore DEL key
#define MF_IGNOREINSDEL 6 // Ignore INS and DEL key
// This message is sent - when requested - to a CFullEditListCtrl class
// instance's owner whenever a list cell is changed after the list had been
// initialized. (Yes, this really is better than having the owner handle
// LVN_ITEMCHANGED messages.)
#define WM_LISTCELLCHANGED (WM_USER + 999)
// A function of this type is passed to ExtraInit_CustEditCol() and called by
// CheckHandleCustEditColumn() when nonstandard editting is needed for a
// specific cell.
typedef bool (CALLBACK* LPCELLEDITPROC) (CObject* pcoowner, int nrow, int ncol,
CString* pcscontents) ;
/////////////////////////////////////////////////////////////////////////////
// CFullEditListCtrl Class
class CFullEditListCtrl : public CListCtrl
{
// Constructor
public:
CFullEditListCtrl();
~CFullEditListCtrl();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFullEditListCtrl)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
//}}AFX_VIRTUAL
// Implementation
protected:
CFELCEditBox m_edit;
// Message maps
//{{AFX_MSG(CFullEditListCtrl)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnKeydown(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnColumnClick(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
PCOLINFO m_pciColInfo ; // Ptr to array of structs with column info
int m_nNumColumns ; // The number of columns in the list
int m_nSortColumn ; // Number of column being sorted
int m_nNextItemData ; // Next item data number to use
int m_nRow ; // Row being edited
int m_nColumn ; // Column being edited
DWORD m_dwToggleFlags ; // Flags indicating toggle flag for list
DWORD m_dwMiscFlags ; // Misc flags used to control list's actions
CObject* m_pcoOwner ; // Pointer to class that owns this one
DWORD m_dwCustEditFlags ; // Flags describing custom edit column
CUIntArray m_cuiaCustEditRows ;// Array indicating specific cust edit rows
LPCELLEDITPROC m_lpCellEditProc ; // Ptr to custom cell editing proc
public:
bool CheckHandleToggleColumns(int nrow, int ncol, PCOLINFO pci) ;
void InitControl(DWORD dwaddlexstyles, int numrows, int numcols,
DWORD dwtoggleflags = 0, int neditlen = 0,
int dwmiscflags = 0) ;
int InitLoadColumn(int ncolnum, LPCSTR strlabel, int nwidth, int nwidthpad,
bool beditable, bool bsortable, COLDATTYPE cdtdatatype,
CObArray* pcoadata, LPCTSTR lpctstrtoggle = NULL) ;
bool ExtraInit_CustEditCol(int ncolnum, CObject* pcoowner,
DWORD dwcusteditflags,
CUIntArray& cuiacusteditrows,
LPCELLEDITPROC lpcelleditproc) ;
bool CheckHandleCustEditColumn(int nrow, int ncol, PCOLINFO pci) ;
BOOL GetPointRowCol(LPPOINT lpPoint, int& iRow, int& iCol, CRect& rect) ;
BOOL GetColCellRect(LPPOINT lpPoint, int& iRow, int& iCol, CRect& rect) ;
bool SaveValue() ;
void HideEditBox() ;
bool GetColumnData(CObArray* pcoadata, int ncolnum) ;
bool SetColumnData(CObArray* pcoadata, int ncolnum) ;
static int CALLBACK SortListData(LPARAM lp1, LPARAM lp2, LPARAM lp3) ;
bool SortControl(int nsortcolumn) ;
void SingleSelect(int nitem) ;
bool GetRowData(int nrow, CStringArray& csafields) ;
int GetNumColumns() { return m_nNumColumns ; }
bool GetColSortOrder(int ncol) {
ASSERT(ncol >= 0 && ncol <= m_nNumColumns) ;
return ((m_pciColInfo + ncol)->basc) ;
} ;
bool EndEditing(bool bsave) ;
bool EditCurRowSpecCol(int ncolumn) ;
int GetCurRow() { return m_nRow ; }
void SetCurRow(int nrow) ;
int GetCurCol() { return m_nColumn ; }
void SendChangeNotification(int nrow, int ncol) ;
} ;
/////////////////////////////////////////////////////////////////////////////
// CFlagsListBox window
class CFlagsListBox : public CListBox
{
// Construction
public:
CFlagsListBox();
// Attributes
public:
bool m_bReady ; // True iff listbox has been initialized
CUIntArray m_cuiaFlagGroupings ; // Flag groupings array
int m_nGrpCnt ; // Number of flag groupings
CString m_csSetString ; // String used to indicate a bit is set
int m_nNumFields ; // Number of flag fields in list box
bool m_bNoClear ; // True iff can't clear flags directly
int m_nNoClearGrp ; // Group for which m_bNoClear applies
// Operations
public:
bool Init(CStringArray& csafieldnames, DWORD dwsettings,
CUIntArray& cuiaflaggroupings, int ngrpcnt,
LPTSTR lptstrsetstring, int ntabstop, bool bnoclear = false,
int nocleargrp = -1) ;
bool Init2(CStringArray& csafieldnames, CString* pcssettings,
CUIntArray& cuiaflaggroupings, int ngrpcnt,
LPTSTR lptstrsetstring, int ntabstop, bool bnoclear = false,
int nocleargrp = -1) ;
DWORD GetNewFlagDWord() ;
void GetNewFlagString(CString* pcsflags, bool badd0x = true) ;
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CFlagsListBox)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CFlagsListBox();
// Generated message map functions
protected:
//{{AFX_MSG(CFlagsListBox)
afx_msg void OnDblclk();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // #define MDT_COMON_CONTROLS