⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmaloglistbox.h

📁 日志表控件
💻 H
字号:
// ==========================================================================
// MMALogListBox.h
// 
// Author : Mike Marquet
//          mike.marquet@altavista.net
//
// Last Modified : 13/01/2000
// by            : Mike marquet
//
// The ListBox style must have the LVS_OWNERDRAWVARIABLE set,
//                             the LVS_HASSTRING not set,
//                             the LVS_SORT not set
//
// You must also add in the parent dialog message map this :
//
//
// if (message == WM_DRAWITEM && (UINT)wParam == <ID of ListBox>)
//  {
//   MMALogListBoxWndProc_DrawItem((LPDRAWITEMSTRUCT)lParam);
//   return TRUE;
//  }
//
// if (message == WM_MEASUREITEM && if (UINT)wParam == <ID of ListBox>)
//  {
//   MMALogListBoxWndProc_MeasureItem((LPMEASUREITEMSTRUCT)lParam);
//   return TRUE;
//  }
// ==========================================================================

#if !defined(AFX_MMALOGLISTBOX_H__82D4AD83_A667_11D3_A0D1_004005555C30__INCLUDED_)
#define AFX_MMALOGLISTBOX_H__82D4AD83_A667_11D3_A0D1_004005555C30__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

// ==========================================================================
// Les Defines
// ==========================================================================

#define MMALOGLISTBOX_LINEDATA_TEXTLEN        255
#define MMALOGLISTBOX_LINEDATA_TYPELEN         50

// Type can be one or more of the following defines : - Type | Flag
//                                                    - Separator

// Types
#define LOGLB_INFO                    0x00000001
#define LOGLB_WARNING                 0x00000002
#define LOGLB_ERROR                   0x00000004
#define LOGLB_FATAL                   0x00000008
#define LOGLB_SYSTEM                  0x00000010
#define LOGLB_DEBUG1                  0x00000020
#define LOGLB_DEBUG2                  0x00000040
#define LOGLB_DEBUG3                  0x00000080
#define LOGLB_DEBUG4                  0x00000100
#define LOGLB_TRACE                   0x00000200
#define LOGLB_PERSONAL1               0x00000400
#define LOGLB_PERSONAL2               0x00000800
#define LOGLB_PERSONAL3               0x00001000
#define LOGLB_PERSONAL4               0x00002000
#define LOGLB_PERSONAL5               0x00004000
#define LOGLB_PERSONAL6               0x00008000
#define LOGLB_PERSONAL7               0x00010000
#define LOGLB_PERSONAL8               0x00020000
#define LOGLB_PERSONAL9               0x00040000
#define LOGLB_PERSONAL10              0x00080000
#define LOGLB_PERSONAL11              0x00100000
#define LOGLB_PERSONAL12              0x00200000
#define LOGLB_PERSONAL13              0x00400000

// Separators
#define LOGLB_SEPARATOR               0x00800000
#define LOGLB_DBLSEPARATOR            0x01000000
#define LOGLB_DASHSEPARATOR           0x02000000
#define LOGLB_DOTSEPARATOR            0x04000000
#define LOGLB_DASHDOTSEPARATOR        0x08000000
#define LOGLB_DASHDOTDOTSEPARATOR     0x10000000

// Flags
#define LOGLB_NOTIME                  0x20000000
#define LOGLB_NOTYPE                  0x40000000

// ==========================================================================
// Les Structures
// ==========================================================================

typedef struct tagMMALogListBoxColors
 {
  BOOL     bUseTextColor;
  COLORREF clrText;
  BOOL     bUseBkColor;
  COLORREF clrBk;
 } MMALOGLISTBOX_COLORS;

// --------------------------------------------------------------------------

typedef struct tagLineDataFile
 {
  BOOL                 bNewLineData;
  MMALOGLISTBOX_COLORS stTimeColors;
  MMALOGLISTBOX_COLORS stTypeColors;
  MMALOGLISTBOX_COLORS stTextColors;
  LONG                 lType;
  char                 szText[MMALOGLISTBOX_LINEDATA_TEXTLEN + 1];
  SYSTEMTIME           stST;
  LOGFONT              stLF;
 } LINEDATA_FILE;

// --------------------------------------------------------------------------

typedef struct tagLineDataMemory
 {
  LINEDATA_FILE stLDF;
  HFONT         hFont;
 } LINEDATA_MEMORY;

// --------------------------------------------------------------------------

typedef struct tagMMALogListBoxUserData
 {
  long     lVersion;
  char     szPersonal[13][MMALOGLISTBOX_LINEDATA_TYPELEN + 1];
  int      iTimeColumnSize;
  int      iTypeColumnSize;
  int      iListBoxWidth;
  COLORREF clrTextDebug[4];
  COLORREF clrBkDebug[4];
  BOOL     bInitialized;
  WNDPROC  pOldWndProc;
 } MMALOGLISTBOX_USERDATA;

// ==========================================================================
// Les Prototypes de Fonctions
// ==========================================================================

void MMALogListBoxWndProc_DrawItem(LPDRAWITEMSTRUCT lpdis);
void MMALogListBoxWndProc_MeasureItem(LPMEASUREITEMSTRUCT lpmis);

/////////////////////////////////////////////////////////////////////////////
// class CMMALogListBoxItemMemory

class CMMALogListBoxItemMemory
 {
  protected :
              BOOL                 m_bNew;
              long                 m_lType;
              char                 m_szText[MMALOGLISTBOX_LINEDATA_TEXTLEN + 1];
              SYSTEMTIME           m_stSystemTime;
              LOGFONT              m_stLogFont;
              HFONT                m_hFont;
              MMALOGLISTBOX_COLORS m_stTimeColors;
              MMALOGLISTBOX_COLORS m_stTypeColors;
              MMALOGLISTBOX_COLORS m_stTextColors;

  public :
           CMMALogListBoxItemMemory();
           ~CMMALogListBoxItemMemory();
 };

/////////////////////////////////////////////////////////////////////////////
// class CMMALogListBox

class CMMALogListBox  
 {
  friend BOOL MMALogListBoxWndProc_Destroy(HWND);
  friend void MMALogListBoxWndProc_DrawItemLine(HDC, LPDRAWITEMSTRUCT);
  friend void MMALogListBoxWndProc_MeasureItem(LPMEASUREITEMSTRUCT);
  friend void MMALogListBoxWndProc_DrawItem(LPDRAWITEMSTRUCT);
  friend LRESULT CALLBACK MMALogListBoxWndProc(HWND, UINT, WPARAM, LPARAM);

  protected :
              HWND                      m_hListBox;
              HFILE                     m_hFile;
              char                      m_szFileName[255];
              long                      m_lNbrLines;
              BOOL                      m_bInitialized;
              LONG                      m_lBias;
              char                      m_szPersonal[13][MMALOGLISTBOX_LINEDATA_TYPELEN + 1];
              COLORREF                  m_clrDebugBk[4];
              COLORREF                  m_clrDebugText[4];
              HDC                       m_hPrintDC;

              static BOOL                    DeleteListBoxString(HWND hListBox, int iIndex);
              static long                    GetExtentForEntireControl(HWND hListBox);
              static long                    GetExtentForString(HWND hListBox, HFONT hFont, LPCTSTR lpszItem);
              static LINEDATA_MEMORY        *GetItemData(HWND hListBox, int iIndex);
              static char                   *GetLengthlyType(HWND hListBox);
              static int                     GetLineCount(LPCTSTR lpszString);
              static WNDPROC                 GetOldWndProc(HWND hListBox);
              static int                     GetPixelStringHeight(HDC hDC, char *szText);
              static char                   *GetStringTime(SYSTEMTIME &stST);
              static char                   *GetStringType(HWND hListBox, long lType);
              static MMALOGLISTBOX_USERDATA *GetUserData(HWND hListBox);
              static long                    IsSeparatorLine(long lType);
              static BOOL                    ResetListBoxContent(HWND hListBox);
              static BOOL                    SetUserData(HWND hListBox, MMALOGLISTBOX_USERDATA *pstUserData);

              BOOL  AddListBoxLine(HWND hListBox, LINEDATA_MEMORY &stLDM, BOOL bFirstAdd = FALSE);
              void  CloseLogFile(HFILE hFile);
              void  CloseClassLogFile();
              BOOL  CreateEmptyLogFile(char *szFileName, long lNbrLines);
              long  GetLogFileIndexAfter(long lIndex, long lNbrLines);
              long  GetLogFileIndexBefore(long lIndex, long lNbrLines);
              long  GetLogFileLineCount(char *szFileName);
              long  GetLogFileLineCount(HFILE hFile);
              BOOL  GetPrintTimeRect(HDC hDC, RECT *pstRect, int iOffsetY = 0);
              BOOL  GetPrintTypeRect(HDC hDC, RECT *pstRect, int iOffsetY = 0);
              BOOL  GetPrintTextRect(HDC hDC, RECT *pstRect, int iOffsetY = 0);
              long  IncreaseActIndex(HFILE hFile);
              BOOL  InitializeListBox(HFILE hFile, HWND hListBox, long lNbrLines);
              BOOL  LogFileExist(char *szFileName);
              HFILE OpenLogFile(char *szFileName);
              BOOL  PrintColumnSeparators(HDC hDC, int iTop, int iBottom);
              int   PrintColumnTitles(HDC hDC, int iOffsetY, BOOL bPrintBkgnd = TRUE);
              int   PrintLine(HDC hDC, LINEDATA_MEMORY *pstLDM, int iOffsetY, BOOL *pbNewPage, BOOL bPrintBkgnd = TRUE);
              int   PrintSeparatorLine(HDC hDC, long lType, BOOL bNewItem, int iOffsetY, BOOL *pbNewPage, BOOL bPrintBkgnd = TRUE);
              long  ReadActIndex(HFILE hFile);
              BOOL  ReadLineDataAt(HFILE hFile, long lIndex, LINEDATA_FILE *pstLDF);
              BOOL  WriteActIndex(HFILE hFile, long *plActIndex);
              BOOL  WriteLineDataAt(HFILE hFile, long lIndex, LINEDATA_FILE &stLDF);

  public :
           CMMALogListBox();
           virtual ~CMMALogListBox();

           BOOL      AddLogLine(LINEDATA_MEMORY &stLDM);
           BOOL      AddLogLine(LPCTSTR lpszMsg, long lType = LOGLB_INFO);
           BOOL      AddLogLineParam(LPCTSTR lpszMsg, long lType, ...);
           BOOL      AddSeparatorLine(long lType = LOGLB_SEPARATOR);
           BOOL      Attach(HWND hListBox, char *szFileName = "MMALogListBox", long lNbrLines = 100, BOOL bRecreate = FALSE);
           BOOL      Clear();
           void      Detach();
           COLORREF  GetDebugBkColor(int iIndex);
           COLORREF  GetDebugTextColor(int iIndex);
           char     *GetPersonalType(int iIndex, char *szText);
           BOOL      Print(HWND hParent, BOOL bPrintBkgnd = TRUE, LPCTSTR lpszDocName = "MMALogListBox", LPCTSTR lpszFontName = "Courier New", int iFontHeight = -30);
           BOOL      PrinterSetup(HWND hParent, BOOL bDefault = FALSE);
           BOOL      Refresh();
           void      SetDebugBkColor(int iIndex, COLORREF clrBk);
           void      SetDebugTextColor(int iIndex, COLORREF clrText);
           void      SetPersonalType(int iIndex, char *szText);
           BOOL      TraceCapture(BOOL bCapture);

           // INLINE
           BOOL IsInitialized() { return m_bInitialized; }
 };

/////////////////////////////////////////////////////////////////////////////
// class CMMALogListBox

class CMMALogbookDlg  
 {
  friend BOOL MMALogbookDlgProc_Destroy(HWND);
  friend BOOL MMALogbookDlgProc_InitDialog(HWND, HWND, LPARAM);
  friend BOOL MMALogbookDlgProc_LButtonDown(HWND, WPARAM, WORD, WORD);
  friend BOOL MMALogbookDlgProc_NCHitTest(HWND, WORD, WORD);
  friend BOOL MMALogbookDlgProc_Size(HWND, WPARAM, WORD, WORD);
  friend BOOL MMALogbookDlgProc_SysCommand(HWND, WPARAM, WORD, WORD);

  protected :
              HINSTANCE       m_hInstance;
              HWND            m_hParent;
              HWND            m_hLogbookDlg;
              HWND            m_hListBox;
              WORD           *m_pDlgTemplateEx;
              BOOL            m_bShowCaption;
              BOOL            m_bNoResize;
              BOOL            m_bNoMove;
              char            m_szTitle[255];
              HFONT           m_hDlgFont;
              CMMALogListBox  m_cMMALogListBox;
              char            m_szFileName[255];
              long            m_lNbrLines;

              static int nCopyAnsiToWideChar(LPWORD lpWCStr, LPSTR lpAnsiIn);

  public :
           CMMALogbookDlg();
           virtual ~CMMALogbookDlg();

           BOOL AddLogLine(LINEDATA_MEMORY &stLDM);
           BOOL AddLogLine(LPCTSTR lpszMsg, long lType = LOGLB_INFO);
           BOOL AddLogLineParam(LPCTSTR lpszMsg, long lType, ...);
           BOOL AddSeparatorLine(long lType = LOGLB_SEPARATOR);

           BOOL CenterLogbook();
           BOOL Clear();
           BOOL CreateLogbookDlg(HINSTANCE hInstance = NULL, HWND hParent = NULL, LPCTSTR lpszFileName = "", long lNbrLines = 0);

           BOOL DestroyLogbookDlg();

           BOOL EnableWindowResizing(BOOL bEnable);

           COLORREF  GetDebugBkColor(int iIndex);
           COLORREF  GetDebugTextColor(int iIndex);
           char     *GetPersonalType(int iIndex, char *szText);

           BOOL IsResizingEnabled();
           BOOL IsVisible();

           BOOL MoveTo(int x, int y);

           BOOL Print(BOOL bPrintBkgnd = TRUE, LPCTSTR lpszDocName = "MMALogListBox", LPCTSTR lpszFontName = "Courier New", int iFontHeight = -30);
           //BOOL PrinterAndPageSetup(BOOL bDefault = FALSE);
           BOOL PrinterSetup(BOOL bDefault = FALSE);

           BOOL Refresh();

           void SetDebugBkColor(int iIndex, COLORREF clrBk);
           void SetDebugTextColor(int iIndex, COLORREF clrText);
           void SetFont(LOGFONT &stLF, BOOL bApplyToAllChild = TRUE);
           void SetPersonalType(int iIndex, char *szText);
           BOOL SetSize(int iWidth, int iHeight);
           BOOL SetTitle(LPCTSTR lpszTitle);
           BOOL Show(BOOL bShow);
           BOOL ShowCaption(BOOL bShow);

           // INLINE
           void EnableWindowMove(BOOL bEnable) { m_bNoMove = !bEnable; }

           BOOL HasCaption() { return m_bShowCaption; }

           BOOL IsWindowMoveEnabled() { return m_bNoMove; }

           void SetFileName(LPCTSTR lpszFileName) { strcpy(m_szFileName,lpszFileName); }
           void SetNbrLines(long lNbrLines) { m_lNbrLines = lNbrLines; }
 };

// ==========================================================================
// ==========================================================================

#endif // !defined(AFX_MMALOGLISTBOX_H__82D4AD83_A667_11D3_A0D1_004005555C30__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -