zl程序教程

您现在的位置是:首页 >  后端

当前栏目

VC++中HTControl控件类之CHTRichEdit富文本编辑控件实例

C++实例 控件 文本编辑 HTControl
2023-06-13 09:15:41 时间

本文所述CHTRichEdit控件类继承自CRichEditCtrl,为了避免CRichEditCtrl的界面风格与CRichEditCtr的滚动条不相协调,因此在CHTRichEdit控件中去掉了CRichEditCtrl的默认滚动条,替换成自己绘制的滚动条,这样就不会破坏整体外观了。替换的滚动条并不需要与默认的滚动条同样的宽度,不受操作系统主题的影响,可以支持任意的宽度,而且在不需要滚动条时它会自动消失,使软件布局不会受到影响。

具体实现代码如下:

#if!defined(__CHTRichEdit_H__)
#define__CHTRichEdit_H__
#include"CHTScrollButton.h"
#include"CHTVertScrollBar.h"
#include"CHTHorzScrollBar.h"
classAFX_CLASS_EXPORTCHTRichEdit:publicCRichEditCtrl
{
DECLARE_DYNAMIC(CHTRichEdit)
public:
CHTRichEdit();
virtual~CHTRichEdit();
protected:
DECLARE_MESSAGE_MAP()
public:
/****************************************************************************
|函数功能:创建滚动条的按钮|
|输入参数:|
|iWidth:按钮宽|
|iHeight:按钮高|
|hBitmapUpNormal:向上按钮常态位图|
|hBitmapUpHover:向上按钮鼠标停留位图|
|hBitmapUpDown:向上按钮鼠标按下位图|
|hBitmapDownNormal:向下按钮常态位图|
|hBitmapDownHover:向下按钮鼠标停留位图|
|hBitmapDownDown:向下按钮鼠标按下位图|
|hBitmapLeftNormal:向左按钮常态位图|
|hBitmapLeftHover:向左按钮鼠标停留位图|
|hBitmapLeftDown:向左按钮鼠标按下位图|
|hBitmapRightNormal:向右按钮常态位图|
|hBitmapRightHover:向右按钮鼠标停留位图|
|hBitmapRightDown:向右按钮鼠标按下位图|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidCreateButton(intiWidth,intiHeight,HBITMAPhBitmapUpNormal,HBITMAPhBitmapUpHover,HBITMAPhBitmapUpDown,
HBITMAPhBitmapDownNormal,HBITMAPhBitmapDownHover,HBITMAPhBitmapDownDown,
HBITMAPhBitmapLeftNormal,HBITMAPhBitmapLeftHover,HBITMAPhBitmapLeftDown,
HBITMAPhBitmapRightNormal,HBITMAPhBitmapRightHover,HBITMAPhBitmapRightDown);
/****************************************************************************
|函数功能:创建滚动条|
|输入参数:|
|iWidth:滚动条宽度|
|hBmpVBg:垂直滚动条背景位图|
|hBmpVThumb:垂直滚动条滑块位图|
|hBmpVHoverThumb:垂直滚动条鼠标在滑块上的位图|
|hBmpVPressThumb:垂直滚动条鼠标按下滑块的位图|
|hBmpHBg:水平滚动条背景位图|
|hBmpHThumb:水平滚动条滑块位图|
|hBmpHHoverThumb:水平滚动条鼠标在滑块上的位图|
|hBmpHPressThumb:水平滚动条鼠标按下滑块的位图|
|iBgTopLen:滚动条背景位图顶端和左端不可拉伸部分长度|
|iBgBottomLen:滚动条背景位图底端和右端不可拉伸部分长度|
|iThumbTopLen:滑块背景位图顶端和左端不可拉伸部分长度|
|iThumbBottomLen:滑块背景位图底端和右端不可拉伸部分长度|
|输出参数:无|
|返回值:无|
|说明:|
****************************************************************************/
voidCreateScrollBar(intiWidth,HBITMAPhBmpVBg,HBITMAPhBmpVThumb,HBITMAPhBmpVHoverThumb,HBITMAPhBmpVPressThumb,
HBITMAPhBmpHBg,HBITMAPhBmpHThumb,HBITMAPhBmpHHoverThumb,HBITMAPhBmpHPressThumb,
intiBgTopLen=0,intiBgBottomLen=0,intiThumbTopLen=0,intiThumbBottomLen=0);
//以下是重载的原接口,可以查阅MSDN
virtualBOOLCreate(DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);
virtualBOOLCreateEx(DWORDdwExStyle,DWORDdwStyle,constRECT&rect,CWnd*pParentWnd,UINTnID);
voidMoveWindow(intx,inty,intnWidth,intnHeight,BOOLbRepaint=TRUE);
voidMoveWindow(LPCRECTlpRect,BOOLbRepaint=TRUE);
BOOLSetWindowPos(HWNDhWndInsertAfter,intx,inty,intcx,intcy,UINTuFlags);
private:
afx_msgvoidOnNcCalcSize(BOOLbCalcValidRects,NCCALCSIZE_PARAMS*lpncsp);
afx_msgvoidOnPaint();
afx_msgvoidOnEnChange();
afx_msgvoidOnNcPaint();
afx_msgBOOLOnNcActivate(BOOLbActive);
afx_msgBOOLOnEraseBkgnd(CDC*pDC);
afx_msgvoidOnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags);
afx_msgvoidOnKeyUp(UINTnChar,UINTnRepCnt,UINTnFlags);
afx_msgvoidOnEnHscroll();
afx_msgvoidOnEnVscroll();
afx_msgvoidOnCaptureChanged(CWnd*pWnd);
afx_msgvoidOnActivate(UINTnState,CWnd*pWndOther,BOOLbMinimized);
afx_msgvoidOnChar(UINTnChar,UINTnRepCnt,UINTnFlags);
afx_msgvoidOnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);
afx_msgvoidOnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar);
afx_msgBOOLOnMouseWheel(UINTnFlags,shortzDelta,CPointpt);
afx_msgvoidOnTimer(UINT_PTRnIDEvent);
afx_msgLRESULTOnNcHitTest(CPointpoint);
afx_msgvoidOnEnRequestresize(NMHDR*pNMHDR,LRESULT*pResult);
afx_msgvoidOnSize(UINTnType,intcx,intcy);
voidSetScrollState();
voidUpdateScrollBar();
public:
CHTScrollButtonm_HTButtonUp;
CHTVertScrollBarm_HTVScrollBar;
CHTScrollButtonm_HTButtonDown;
CHTScrollButtonm_HTButtonLeft;
CHTHorzScrollBarm_HTHScrollBar;
CHTScrollButtonm_HTButtonRight;
private:
intm_iBtnHeight;
intm_iBtnWidth;
BOOLm_bVScrollBarFlag;
BOOLm_bHScrollBarFlag;
intm_iWidth;
intm_iHeight;
intm_iX;
intm_iY;
BOOLm_bScrollFlag;
BOOLm_bMoveFlag;
intm_iScrollBarWidth;
intm_iScrollBarHeight;
BOOLm_bFlag;
intm_iCountV;
intm_iCountH;
};
#endif//!__CHTRichEdit_H__

代码备有一定的注释,希望本例所述能够对大家有所帮助。