北方工大-灵创策华 郑成龙(Q Q : 120952389) MFC 字符输入实例讲解 本文主要通过简单实例讲解,实现 SDI 中的视图窗口中实现字符的输入功能,主要是通过本文能够给 MFC 初学者一个相对简单的认知过程,希望能够给像我一样的菜鸟们一缕光明(好悲壮啊)! 1. 首先在 VS2008 内创建一个单文档(SDI)工程,起名为 MyText,选择默认即可,编译完成效果如下: 图 1 2. 接下来,请根据我的思路与我一起去思考!完成字符输入功能,首先我们需要一个光标(caret),因此第一步,我们需要实现光标的创建与现实!在视图类窗口(客户服务区)创建后,我们创建我们的光标,那么需要在哪里创建呢?对了!CMyTextView 类中的消息 WM_CREATE 对应的 OnCreate()函数中添加即可: int CMyTextView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 CClientDC clientDC(this); 北方工大-灵创策华 郑成龙(Q Q : 120952389) //获取当前字体的度量信息 TEXTMETRIC tm; clientDC.GetTextMetrics(&tm); //创建实体光标并显示 CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight); ShowCaret(); return 0; } 3. 此时光标显示在左上角位置,且不能移动。因此如何让光标移动到我们鼠标点击的位置呢 ?显然,我们要在视图类中相应WM_LBUTTONDOWN 消息,编辑相应的代码: void CMyTextView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 SetCaretPos(point); m_point = point; CView::OnLButtonDown(nFlags, point); } 4. 下面应该是我们处理字符的阶段了!想实现字符输入,我们要敲键盘,那我们应该去响应那个消息?当然是 WM_CHAR,编辑其相应的处理函数将是我们的主要工作。此时,我想由易到难,步步解析,这样更容易大家理解,我们依次解决以下问题: 在响应之前,我们首先需要存储之前我们点击鼠标左键的位置,因为我们要在点击的位置输入字符,我们输入字符的函数 TextOut(横坐标,纵坐标,…),所以我们在视图类中添加一个 CPoint 型的私有变量 m_point,并在 OnLButtonDown()函数中赋值;此时,编辑字符输入的代码如下: void CMyTextView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: 在此添加消息处...