📄 chatricheditctrl.h
字号:
#pragma once
#include <afxtempl.h>
// CChatRichEditCtrl
struct CPair
{
CPair(const CPair& pair){Effects=pair.Effects,TextColor=pair.TextColor;}
CPair(){Effects=0;TextColor=RGB(0,0,0);}
CPair(DWORD _Effects,COLORREF _TextColor){Effects=_Effects,TextColor=_TextColor;}
DWORD Effects;
COLORREF TextColor;
};
class CChatRichEditCtrl : public CRichEditCtrl
{
DECLARE_DYNAMIC(CChatRichEditCtrl)
UINT WinChatLine;
CHARFORMAT cf;
CArray<CString> ChatArray;
CArray<CPair> EffectArray;
bool IsOutOfRange(int Line) const;
UINT GetEndLine(int BeginLine) const;
UINT GetBeginLine(int EndLine) const;
void MowArray();
public:
CChatRichEditCtrl();
virtual ~CChatRichEditCtrl();
void ShowText(int BeginLine);
void ShowText(int BeginLine,int EndLine);
void AppendText(const CString& str,COLORREF cr=0,bool bold=false);
void ClearUp();
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
};
inline void CChatRichEditCtrl::ClearUp(){
ChatArray.RemoveAll();EffectArray.RemoveAll();ShowText(0);
}
inline bool CChatRichEditCtrl::IsOutOfRange(int Line) const
{
if(Line<0) return true;
if(Line>ChatArray.GetCount())return true;
return false;
}
inline void CChatRichEditCtrl::ShowText(int BeginLine)
{
UINT EndLine = GetEndLine(BeginLine);
ShowText(BeginLine,EndLine);
}
inline UINT CChatRichEditCtrl::GetBeginLine(int EndLine) const
{
if(EndLine<0)EndLine=0;
else if(EndLine>ChatArray.GetCount())EndLine=(int)ChatArray.GetCount();
int BeginLine=EndLine-WinChatLine;
if(BeginLine<0)BeginLine=0;
return BeginLine;
}
inline UINT CChatRichEditCtrl::GetEndLine(int BeginLine) const
{
if(BeginLine<0)BeginLine=0;
UINT EndLine=BeginLine+WinChatLine;
if(EndLine>(UINT)ChatArray.GetCount())EndLine=(int)ChatArray.GetCount();
if((UINT)BeginLine>EndLine)BeginLine=EndLine;
ASSERT((int)EndLine>-1);
return EndLine;
}
inline void CChatRichEditCtrl::MowArray()
{
#ifdef _DEBUG
int numChatArray1 = ChatArray.GetCount();
int numEffectArray1 = EffectArray.GetCount();
ASSERT(numChatArray1 == numEffectArray1);
#endif
ChatArray.RemoveAt(0);
EffectArray.RemoveAt(0);
#ifdef _DEBUG
int numChatArray2 = ChatArray.GetCount();
int numEffectArray2 = EffectArray.GetCount();
ASSERT(numChatArray2 == numChatArray1-1);
ASSERT(numEffectArray2 == numEffectArray1-1);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -