📄 mmaloglistbox.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 + -