MFC 插入符输入文字

在View中,三个消息事件:
BEGIN_MESSAGE_MAP(CMFCApplication1View, CView)
	// 标准打印命令
	ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
    ON_WM_CREATE()   // 1
    ON_WM_LBUTTONDOWN()  // 2
    ON_WM_CHAR()  // 3
END_MESSAGE_MAP()
OnCreate:
int CMFCApplication1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CView::OnCreate(lpCreateStruct) == -1)
        return -1;
    // 获取字体信息
    CClientDC dc(this);
    TEXTMETRIC tm; // 字体信息结构体
    dc.GetTextMetrics(&tm);
    // 继承于CWnd
    CreateSolidCaret(tm.tmAveCharWidth / 8, tm.tmHeight); // 创建插入符
    ShowCaret(); // 显示
    return 0;
}
OnLButtonDown:
void CMFCApplication1View::OnLButtonDown(UINT nFlags, CPoint point)
{
    SetCaretPos(point); // 移动插入符
    // 保存点击坐标
    m_point = point;
    m_str = TEXT("");
    m_str.Empty();
    CView::OnLButtonDown(nFlags, point);
}
OnChar:
void CMFCApplication1View::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    CClientDC dc(this);
    if (nChar == VK_RETURN) // 换行
    {
        m_str.Empty(); // 换行清空
        TEXTMETRIC tm; // 字体信息结构体
        dc.GetTextMetrics(&tm);
        m_point.y = m_point.y + tm.tmHeight;
    }
    else if (nChar == VK_BACK) // 退格
    {
        COLORREF color = dc.GetBkColor();// 获取背景颜色
        // 设置字体颜色
        COLORREF oldColor = dc.SetTextColor(color);
        // 背景颜色重写一次
        dc.TextOutW(m_point.x, m_point.y, m_str);
        // 去掉最后一个字符
        m_str = m_str.Left(m_str.GetLength() - 1);
        // 在恢复原来的颜色
        dc.SetTextColor(oldColor);
    }
    else {
        m_str += (TCHAR)nChar;
    }
    CSize size = dc.GetTextExtent(m_str);  // 获取字符串长度
    int x = m_point.x + size.cx;
    int y = m_point.y;
    SetCaretPos(CPoint(x, y));  // 让插入符根据字符串长度移动
    dc.TextOutW(m_point.x, m_point.y, m_str);
    CView::OnChar(nChar, nRepCnt, nFlags);
}
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号