1. CString类用法
- CString类对象的初始化
CString str;
str="abd";
/*----------------------------------*/
CString str1("abc");
CString str2("cba");
- 字符串基本操作
长度:GetLength();
CString str("abc");
int len=str.GetLength();//len=3
是否为空,即不含字符:IsEmpty(); 清空字符串:Empty();
CString str;
str="abc";
BOOL empty=str.IsEmpty();//empty=FALSE
str.Empty();//清空字符串
BOOL empty=str.IsEmpty();//empty=TRUE
转换大小写:MakeUpper、MakeLower 转换顺序:MakeReverse
CString str("Abc");
str.MakeUpper();//str=="ABC"
str.MakeLower();//str=="abc"
st.MakeReverse();//sre=="cbA"
- 字符串查找
Find、ReverseFind、FindOneOf 三个函数可以实现字符串的查找操作
Find 从指定位置开始查找指定的字符或者字符串,返回其位置,找不到返回 -1;
CString str("abcdefg");
int idx = str.Find("cde"); //idx 的值为2;
ReverseFind 从字符串末尾开始查找指定的字符,返回其位置,找不到返回 -1,虽然是从后向前查找,但是位置为从开始算起;
CString str("abcdefg");
int idx = str.ReverseFind('e'); //idx 的值为4;
FindOneOf 查找参数中给定字符串中的任意字符,返回第一次出现的位置,找不到返回 -1;
CString str("abcabcd");
int idx = str.FindOneOf("cbd"); //idx 的值为1;
- 字符串的替换与删除
Replace 替换 CString 对象中的指定的字符或者字符串,返回替换的个数,无匹配字符返回 0;
CString str("abcdabc");
int num = str.Replace('b', 'k'); //str == akcdakc, num == 2
/*-------------------------------------------------------*/
CString str("abcdabc");
int num = str.Replace(("bc"), ("kw")); //str == akwdakw, num == 2
Remove 删除 CString 对象中的指定字符,返回删除字符的个数,有多个时都会删除;
CString str("abcdabcb");
int num = str.Remove('b'); //str == acdac, num == 3
Delete 删除 CString 对象中的指定位置的字符,返回处理后的字符串长度;
CString str("abcd");
int num = str.Delete(1, 3); //str == a, num == 1
- 格式化字符串
Format 方法,实现从 int、long 等数值类型向 CString 类型的转换
int num=2;
CString str;
str.Format=("%c",num);
2. 插入符创建
void CreateSolidCaret( int nWidth, int nHeight );//创建插入符
void CreateCaret( CBitmap* pBitmap );//创建位图插入符
void ShowCaret( );//显示插入符
void HideCaret( );//隐藏插入符
static void PASCAL SetCaretPos( POINT point );//移动插入符号
注:
1)创建插入符要在窗口创建完成之后, CreateSolidCaret 函数创建的插入符被初始化为隐藏,所以需要调用 ShowCaret()将其显示。
2)使用 CreateCaret 函数创建位图插入符的时候,不能使用局部的位图对象关联位图资源。(与资源相关联的 C++对象,当它析构的时候会同时把与它相关联的资源销毁。)
3. 回车、退出创建
void CTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) //nChar按键输入信息
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
CFont font; //字体
font.CreatePointFont(300,"华文行楷",NULL); //字体设置
CFont *pOldFont=dc.SelectObject(&font);//字体选择font
TEXTMETRIC tm;
dc.GetTextMetrics(&tm);
if(0x0d==nChar) //回车(回车键的ASCII码十六进制数为0d)
{
m_strLine.Empty();
m_ptOrigin.y+=tm.tmHeight;
}
else if(0x08==nChar) //删除字符(退回键的ASCII码十六进制数为08)
{
COLORREF clr=dc.SetTextColor(dc.GetBkColor());//文本色设置成背景色
dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);
m_strLine=m_strLine.Left(m_strLine.GetLength()-1);//删除最右边的一个字符
dc.SetTextColor(clr);
}
else
{
CString tS;
tS.Format("%c",nChar);
m_strLine += tS;
/*m_strLine+=nChar;*/
}
4. 定时器创建(SetTimer)
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer
)(HWND,
UINT,
UINT_PTR,
DWORD
)
);
nIDEvent
Specifies a nonzero timer identifier.nElapse
Specifies the time-out value, in milliseconds.
SetTimer(1,100,NULL); //100毫秒
5. 获取当前字体信息的度量 GetTextMetrics
BOOL GetTextMetrics( LPTEXTMETRIC lpMetrics ) const;
说明:
typedef struct tagTEXTMETRIC {
int tmHeight;//字体高度。Specifies the height (ascent + descent) of characters.
int tmAscent;//基线以上的字体高度
int tmDescent;//基线以下的字体高度
int tmInternalLeading;
int tmExternalLeading;
int tmAveCharWidth;//字符平均宽度
int tmMaxCharWidth;
int tmWeight;
BYTE tmItalic;
BYTE tmUnderlined;
BYTE tmStruckOut;
BYTE tmFirstChar;
BYTE tmLastChar;
BYTE tmDefaultChar;
BYTE tmBreakChar;
BYTE tmPitchAndFamily;
BYTE tmCharSet;
int tmOverhang;
int tmDigitizedAspectX;
int tmDigitizedAspectY;
} TEXTMETRIC;
//创建设备描述表
CClientDC dc(this);
//定义文本信息结构体变量
TEXTMETRIC tm;
//获得设备描述表中的文本信息
dc.GetTextMetrics(&tm);
//根据字体大小,创建合适的插入符
CreateSolidCaret(tm.tmAveCharWidth / 8, tm.tmHeight);
ShowCaret();
字体信息如下: