Files
Sun1602/Server/SolarConsole/ListControl.h
T
2022-10-26 12:25:11 +08:00

79 lines
2.0 KiB
C++

#ifndef __LIST_CONSTROL_H__
#define __LIST_CONSTROL_H__
#pragma once
#include <Linkedlist.h>
#include <MemoryPoolFactory.h>
#define FRAMELEFTTOP_INCOLOR RGB(64,64,64)
#define FRAMELEFTTOP_OUTCOLOR RGB(128,128,128)
#define FRAMERIGHTBOTTOM_INCOLOR RGB(212,208,200)
#define FRAMERIGHTBOTTOM_OUTCOLOR RGB(255,255,255)
class ListControl
{
public:
ListControl();
~ListControl();
VOID DestroyList();
VOID CreateList( HINSTANCE hInstance, HWND hWnd, LPLOGFONT pLogFont, int x, int y, int width, int height );
DWORD AddString( char * szString, DWORD rgb = RGB(200,200,200) );
BOOL DeleteString( char * pszString );
VOID ResetContent();
char * GetString( DWORD index );
DWORD GetLineCount();
VOID GetScrollWindowPos( int& x, int& y, int& width, int& height );
VOID InvalidateUpdate();
VOID MessageProc( UINT message, WPARAM wParam, LPARAM lParam );
VOID OnSize( int cx, int cy );
private:
VOID UpdateScrollRange();
VOID UpdateScrollBar();
VOID OnMove( int x, int y );
VOID DrawRectangle( int left, int top, int right, int bottom, HPEN PenLeftTop, HPEN PenRightBottom );
enum { MAX_LINE_LENGTH = 256, SCROLLWIDTH = 18, FRAMEBORDER = 2, };
struct LINENODE
{
char szLine[MAX_LINE_LENGTH];
DWORD rgb;
};
struct LINEDESC
{
WORD wIndentation;
WORD wLineHeight;
WORD wMarginByLine;
WORD wNumLinePerPage;
};
int m_x;
int m_y;
int m_width;
int m_height;
int m_nScrollPos;
int m_nScrollMaxPos;
RECT m_WindowRect;
LINEDESC m_LineDesc;
DWORD m_BGColor;
DWORD m_FGColor;
HFONT m_hFont;
HPEN m_hBGPenInlt;
HPEN m_hBGPenInrb;
HPEN m_hBGPenOutlt;
HPEN m_hBGPenOutrb;
HBRUSH m_hBGBrush;
HWND m_hParentWnd;
HWND m_hScrollWnd;
HDC m_hDC;
util::CLinkedlist<LINENODE *> * m_pLineList;
util::CMemoryPoolFactory<LINENODE> * m_pLineNodePool;
};
#endif // __LIST_CONSTROL_H__