本文介绍如果通过MFC编程实现模拟AutoCAD 在单文本视图窗口任意位置输入文字。
先在VS2017中建一个名为FormatDemo单文档工程,在FormatDemoView.h中声明如下变量:
public: COLORREF mColor; UINT linetype; LOGFONT logfont; CEdit mEdit; UINT drawType; CWnd* pwnd; BOOL drawTextFlag; CString str; CPoint mPoint;
在FormatDemoView。cpp中重写onInitialUpdate()函数,在函数中生成一个文本框控件,用以实现文字输入:
void CFormatDemoView::onInitialUpdate() { CView::onInitialUpdate(); // TODO: 在此添加专用代码和/或调用基类 mEdit.Create(ES_MULTILINE | WS_CHILD| WS_TABSTOP | WS_BORDER,CRect(0, 0, 0, 0), this, 1234); }
在菜单中IDR_MAINframe菜单中新添加“格式” “绘制“菜单栏,在”格式“,下添加如下子菜单:
在绘制下,添加如下子菜单:
为格式下的”字体“修改”字体“菜单项ID,如下:
为字体“菜单项 添加时间处理程序:
void CFormatDemoView::onTextFont() { // TODO: 在此添加命令处理程序代码 CFontDialog cfdlg; cfdlg.m_cf.rgbColors = mColor; if (cfdlg.DoModal() == IDOK) { cfdlg.GetCurrentFont(&logfont); mColor = cfdlg.GetColor(); } }
修改”绘制“下的子菜单项”单行文字“的ID如下:
为”单行文字“菜单项,添加事件处理代码:
void CFormatDemoView::onSingleText() { // TODO: 在此添加命令处理程序代码 drawType = 4; }
打开FormatDemoView的属性表:
打开后如下:
在消息列中找到WM_CTLCOLOR,添加OnCtlColor消息处理函数,已实现修改输入编辑框控件文本颜色:
HBRUSH CFormatDemoView::onCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CView::onCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何特性 if (nCtlColor == CTLCOLOR_EDIT) { pDC->SetTextColor(mColor); } // TODO: 如果默认的不是所需画笔,则返回另一个画笔 return hbr; }
在FormatDemoView的属性表的消息列中找到WM_LBUTTONDOW, 添加OnLbuttonDown消息处理函数,在函数中实现,指定文字输入位置,叫出文本框控件实现文字输入:
在OnLbuttonDown函数中添加如下代码:
void CFormatDemoView::onLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CClientDC dc(this); switch (drawType) { case 0: break; case 1: break; case 2: break; case 3: SetCaretPos(point); ShowCaret(); break; case 4: pwnd = GetDlgItem(1234); if (!drawTextFlag) { drawTextFlag = 1; pwnd->MoveWindow(point.x, point.y, point.x + logfont.lfWidth, point.y + logfont.lfHeight); pwnd->ShowWindow(SW_SHOW); pwnd->SetFocus(); mPoint = point; } else { drawTextFlag = 0; pwnd->GetWindowTextW(str); pwnd->SetWindowTextW((LPCTSTR)""); pwnd->ShowWindow(SW_HIDE); pwnd->MoveWindow(0, 0, 0, 0); CFont font; CFont* defautFont; font.CreateFontIndirectW(&logfont); defautFont = dc.SelectObject(&font); CClientDC dc(this); dc.SetTextColor(mColor); dc.TextOut(mPoint.x, mPoint.y, str); dc.SelectObject(defautFont); font.DeleteObject(); drawType = 0; } break; } CView::onLButtonDown(nFlags, point); }
验证:
按下面图示,执行程序:
运行起来,如下:
设置字体格式
具体设置 选择,如下:
实现单行文字 输入:
点击单行文字后,点击需要输入的位置,d出文本输入框,如下:
输入文字”Hello World!”
鼠标左键,单击编辑框外任意位置,即可完成输入,如下:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)