lesson5:文本编辑

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();

字体信息如下:
imag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wcyd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值