2017.6.17 字符串输入

来源:互联网 发布:ae cs6 mac汉化破解版 编辑:程序博客网 时间:2024/06/07 04:49

我们要在屏幕上输出连续的字符串,首先要创建消息响应函数WM_ONCHAR,此函数是用来读取键盘输入的字符串。接下来添加变量 m_strLine 来保存输入的字符串,m_strLine 是属于CString类的。通过if语句 分别响应回车键 退格键和其他字符。

void CTEXTView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags){    // TODO:  在此添加消息处理程序代码和/或调用默认值    /**********************wjl****************************    <键入字符串>        1. 在OnChar下添加消息响应 就是响应键盘输入的字符        2. 在键盘上按下回车键,字符串的输入就要换行(在Y方向上增加一个字符高度)        3. 在键盘上按下退格键,删除一个字符,这里并不是直接删除,而是把文本设置成背景色,           然后去掉最后一个字符,再显示出来,附上之前的颜色        4. 在键盘上按下字符后,直接在原有字符串m_strLine 后面加上nChar 字符        5. 最后要用TextOut 输出按键后的字符串        6. 要让光标跟随字符的输入,让光标获取当前字符串的尺寸,从而重新显示光标    ***********************wjl****************************/    CClientDC dc(this);    TEXTMETRIC tm;    dc.GetTextMetrics(&tm);    if (0x0d == nChar)  // 如果是按下回车键 清空之前的字符串    {        m_strLine.Empty();        m_ptOrigin.y += tm.tmHeight; // 对回车键的处理 按下回车后光标跑到下一行    }    else if (0x08 == nChar)  // 按下退格键 消除一个字符    {        // 首先将文本设置成背景色(要保存之前的颜色 SetTextColor函数返回先前的颜色)        COLORREF clr = dc.SetTextColor(dc.GetBkColor());        dc.TextOutW(m_ptOrigin.x,m_ptOrigin.y,m_strLine);        // 接下来 减少一个字符        m_strLine = m_strLine.Left(m_strLine.GetLength()-1);        dc.SetTextColor(clr); // 将文本颜色设置成之前的颜色    }    else  // 将字符加到之前的对象中    {        m_strLine = m_strLine+(char)nChar;    }    // 让光标随着字符移动    CSize sz = dc.GetTextExtent(m_strLine); // 获得当前字符串的尺寸    CPoint pt;    pt.x = m_ptOrigin.x + sz.cx;     pt.y = m_ptOrigin.y;    SetCaretPos(pt);     // 重新显示光标    dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strLine);    CView::OnChar(nChar, nRepCnt, nFlags);}

我们想要插入符随着鼠标左键移动,首先创建消息响应函数WM_OnLButtonDown,用来捕获鼠标左键,SetCaretPos() 函数是光标的位置函数

void CTEXTView::OnLButtonDown(UINT nFlags, CPoint point){    // TODO:  在此添加消息处理程序代码和/或调用默认值    /**********************wjl****************************    <鼠标左键响应>        1. 按下鼠标左键,光标自动定位到鼠标处    ***********************wjl****************************/    SetCaretPos(point); // 让光标跟着鼠标左键走    m_strLine.Empty();   // 将CString 里面的内容清空    m_ptOrigin = point;  // 将鼠标左键按下的坐标赋给 m_ptOrigin 用来确定字符串的起始位置    CView::OnLButtonDown(nFlags, point);}
原创粉丝点击