124 lines
4.9 KiB
C
124 lines
4.9 KiB
C
|
#ifndef _INC_DSKQUOTA_XBYTES_H
|
||
|
#define _INC_DSKQUOTA_XBYTES_H
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
/* File: xbytes.h
|
||
|
|
||
|
Description: This module implements a class that coordinates the operation
|
||
|
between the edit control and combo box used for entering byte values.
|
||
|
The name "XBytes" is used because the control can represent
|
||
|
KBytes, MBytes, GBytes etc.
|
||
|
|
||
|
The cooperation between edit control and combo control is required
|
||
|
so that the user can enter a byte value in the edit control then
|
||
|
indicate it's order (KB, MB, GB...) using a selection from the combo box.
|
||
|
|
||
|
A simple external interface is provided to initially set the
|
||
|
object's byte value then retrieve the byte value when needed. The
|
||
|
object's client is also required to call two member functions when
|
||
|
the parent dialog receives an EN_UPDATE notification and a CBN_SELCHANGE
|
||
|
message. The XBytes object handles all of the value scaling
|
||
|
internally.
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Date Description Programmer
|
||
|
-------- --------------------------------------------------- ----------
|
||
|
08/30/96 Initial creation. BrianAu
|
||
|
10/15/96 Added m_MaxBytes member. BrianAu
|
||
|
10/22/96 Added ValueInRange() member. BrianAu
|
||
|
05/29/98 Removed ValueInRange() and m_MaxBytes members. BrianAu
|
||
|
*/
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
const INT MAX_DECIMAL_SEP = 10;
|
||
|
const INT MAX_NOLIMIT_LEN = 80; // This should be plenty for localization.
|
||
|
|
||
|
#define MAX_ORDER e_Exa
|
||
|
#define VALID_ORDER(ord) ((ord) >= e_Byte && (ord) <= MAX_ORDER)
|
||
|
|
||
|
|
||
|
class XBytes
|
||
|
{
|
||
|
private:
|
||
|
INT64 m_ValueBytes; // Byte value.
|
||
|
HWND m_hDlg; // Parent dlg.
|
||
|
DWORD m_idCtlEdit; // Edit control.
|
||
|
DWORD m_idCtlCombo; // Combo control.
|
||
|
static TCHAR m_szNoLimit[MAX_NOLIMIT_LEN];
|
||
|
|
||
|
VOID CommonInit(VOID);
|
||
|
|
||
|
INLINE BOOL IsCharNumeric(TCHAR ch)
|
||
|
{ return IsCharAlphaNumeric(ch) && !IsCharAlpha(ch); }
|
||
|
BOOL StrToInt(LPCTSTR pszValue, INT64 *pIntValue);
|
||
|
|
||
|
INLINE INT_PTR SendToEditCtl(UINT message, WPARAM wParam, LPARAM lParam)
|
||
|
{ return SendMessage(GetDlgItem(m_hDlg, m_idCtlEdit), message, wParam, lParam); }
|
||
|
INLINE INT_PTR SendToCombo(UINT message, WPARAM wParam, LPARAM lParam)
|
||
|
{ return SendMessage(GetDlgItem(m_hDlg, m_idCtlCombo), message, wParam, lParam); }
|
||
|
|
||
|
INLINE INT_PTR GetOrderFromCombo(VOID)
|
||
|
{ return SendToCombo(CB_GETCURSEL, 0, 0) + 1; }
|
||
|
INLINE INT_PTR SetOrderInCombo(INT iOrder)
|
||
|
{ return SendToCombo(CB_SETCURSEL, iOrder-1, 0); }
|
||
|
|
||
|
VOID LoadComboItems(INT64 MaxBytes);
|
||
|
VOID SetBestDisplay(VOID);
|
||
|
|
||
|
BOOL Store(INT64 Value, INT xbOrder);
|
||
|
BOOL Store(LPCTSTR pszValue, INT xbOrder);
|
||
|
|
||
|
INT64 Fetch(INT64 *pDecimal, INT xbOrder); // Fetch in requested order.
|
||
|
DWORD Fetch(DWORD *pDecimal, INT *pxbOrder); // Fetch in "best" order.
|
||
|
|
||
|
bool UndoLastEdit(void);
|
||
|
|
||
|
static VOID LoadStaticStrings(void);
|
||
|
static VOID FormatForDisplay(LPTSTR pszDest,
|
||
|
UINT cchDest,
|
||
|
DWORD dwWholePart,
|
||
|
DWORD dwFracPart);
|
||
|
VOID Enable(BOOL bEnable);
|
||
|
|
||
|
public:
|
||
|
|
||
|
//
|
||
|
// With the exception of e_Byte, these must match the order
|
||
|
// of the IDS_ORDERKB, IDS_ORDERMB... string resource IDs.
|
||
|
// There is no IDS_ORDERBYTE string resource.
|
||
|
//
|
||
|
enum {e_Byte, e_Kilo, e_Mega, e_Giga, e_Tera, e_Peta, e_Exa};
|
||
|
|
||
|
XBytes(VOID);
|
||
|
|
||
|
XBytes(HWND hDlg, DWORD idCtlEdit, DWORD idCtlCombo, INT64 CurrentBytes);
|
||
|
|
||
|
static double ConvertFromBytes(INT64 ValueBytes, INT xbOrder);
|
||
|
static INT64 BytesToParts(INT64 ValueBytes, INT64 *pDecimal, INT xbOrder);
|
||
|
static DWORD BytesToParts(INT64 ValueBytes, LPDWORD pDecimal, INT *pxbOrder);
|
||
|
static VOID FormatByteCountForDisplay(INT64 Bytes, LPTSTR pszDest, UINT cchDest);
|
||
|
static VOID FormatByteCountForDisplay(INT64 Bytes, LPTSTR pszDest, UINT cchDest, INT *pOrder);
|
||
|
static VOID FormatByteCountForDisplay(INT64 Bytes, LPTSTR pszDest, UINT cchDest, INT Order);
|
||
|
|
||
|
INT64 GetBytes(VOID)
|
||
|
{ return Fetch(NULL, e_Byte); }
|
||
|
|
||
|
VOID SetBytes(INT64 Value);
|
||
|
|
||
|
//
|
||
|
// EN_xxxx handlers. Client must call this on EN_UPDATE.
|
||
|
//
|
||
|
BOOL OnEditNotifyUpdate(LPARAM lParam);
|
||
|
BOOL OnEditKillFocus(LPARAM lParam);
|
||
|
|
||
|
//
|
||
|
// CBN_xxxx handlers. Client must call this on CBN_SELCHANGE.
|
||
|
//
|
||
|
BOOL OnComboNotifySelChange(LPARAM lParam);
|
||
|
|
||
|
BOOL IsEnabled(VOID);
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif // _INC_DSKQUOTA_XBYTES_H
|