一. 旋转控件 CSpinButtonCtrl
(1)控件类型
UDS_ALIGNRIGHT/UDS_ALIGNLEFT 内嵌到绑定的控件左边和右边
UDS_SETBUDDYINT 点击控件发送WM_SETTEXT消息,改变CEdit控件的值
UDS_WRAP 在RANG返回循环增加和减少
UDS_ARROWKEYS
UDS_NOTHOUSANDS
UDS_AUTOBUDDY
UDS_HORZ Spin控件水平放置,默认为垂直放置
(2)创建控件
CSpinButtonCtrl *pSpin = new CSpinButtonCtrl;
pSpin->Create(WS_CHILD|WS_VISIBLE|UDS_ARROWKEYS|UDS_ALIGNRIGHT
|UDS_SETBUDDYINT|UDS_WRAP , CRect(0,0,20,25), this, IDC_SPIN);
pSpin->MoveWindow(200, 302,20,25);
(3)绑定CEdit控件
若在创建CSpin控件时添加UDS_AUTOBUDDY类型,会自动绑定到最近的CEdit控件上
手动绑定 pSpin->SetBuddy(pEdit);
(4)设置范围
pSpin->SetRange32(1,20); // 默认范围100-0
二. 高级编辑控件CRichEdit
(1) 重要数据结构CHARFORMAT
typedef struct _charformat {
UINT cbSize; // 数据结构大小,由于版本变化结构大小可能发生变化
DWORD dwMask; // CFM_FACE|CFM_SIZE|CFM_COLOR|CFM_BOLD|CFM_UNDERLINE
DWORD dwEffects; // CFM_BOLD|CFM_UNDERLINE开关CFR_BOLD|CFE_UNDERLINE
LONG yHeight; // 字体搞丢
LONG yOffset;
COLORREF crTextColor; // 字体颜色
BYTE bCharSet;
BYTE bPitchAndFamily;
TCHAR szFaceName[LF_FACESIZE]; // 字体设置
} CHARFORMAT;
例子:
CHARFORMAT fm = {sizeof(CHARFORMAT)};
fm.dwMask = CFM_FACE|CFM_SIZE|CFM_COLOR|CFM_BOLD|CFM_UNDERLINE;
strcpy(fm.szFaceName, "楷体—GB2312");
fm.crTextColor = RGB(255,0,0);
cf.yHeight = 200;
cf.dwEffects = CFE_BOLD|CFE_UNDERLINE;
int nLen = m_hist.GetWindowTextLength();
m_hist.SetSel(nLen,nLen);
COleDataTime time = COleDataTime::GetCurrentTime();
m_hist.ReplaceSel("你对XXX说:("+time.Format("%H:%M:%S")+")\r\n");
m_hist.SetSel(nLen, -1);
pRichEdit->SetSelectionCharFormat(cf);
(2)常用函数
(a)可以调用CWnd::SetWindowText函数设置整个RichEidt控件的文字,
更多情况是调用CRichEditCtrl::ReplaceSel函数插入文字或覆盖文字
(b)SetDefaultCharFormat 设置所有文字格式(已经输入和将要输入)
(c)SetSelectionCharFormat 为选中的文字设置格式
(d)SetWordCharFormat 为将要输入的文字设置格式
(e)SetParaFormat 为当前选择的段落设置格式
(f)int nLen = GetWindowTextLength();
(g)SetSel(nLen, -1);
(3)特别注意
必须在APP类的InitInstance函数中,在程序刚启动时执行全局函数AfxInitRichEdit()
普通编辑框内部的所有文字的颜色和字体都是统一的
高级编辑控件是不同文字和段落可以设置不同的字体和颜色
普通编辑框缺省有内置的上下文菜单,而高级编辑控件内没有上下文菜单