我MFC做了一个画图板,但不知道如何可以实现一个输入文字的功能?

rwujie 2006-09-12 10:46:37
就是象一般的画图板一样,可以输入文字,不知道各位老鸟有没有做过呢?该如何做,请赐教。
...全文
549 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
rwujie 2007-01-11
  • 打赏
  • 举报
回复
void CTest10View::OnInitialUpdate()
{
CView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
CRect rect(100,100,160,120);
edit.Create( WS_CHILD | WS_BORDER,rect,this,IDC_EDIT);

}
这是什么意思呀?
jichengsuda 2006-12-07
  • 打赏
  • 举报
回复
shl6894 好强啊!!!!!!!!!!!!
rwujie 2006-12-05
  • 打赏
  • 举报
回复
to shl6894:

为什么我在VC++中的CTest10View中不能添加OnInitialUpdate() ,这个函数是自带的消息处理函数?还是你自己创建的函数?
firein 2006-12-04
  • 打赏
  • 举报
回复
恩啊
一分之千 2006-12-04
  • 打赏
  • 举报
回复
可以按照如下方法进行,不过功能比较简单,楼主可以自己扩展
.h
public:
CEdit edit;
CPoint m_ptPoint;
.cpp

#define IDC_EDIT WM_USER+1


void CTest10View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
static int flag=0;
if(!flag)
{
CRect rect(point.x,point.y,point.x+400,point.y+60);
edit.MoveWindow(&rect,TRUE);
edit.ShowWindow(SW_SHOW );
edit.SetFocus();
m_ptPoint=point;
flag=1;
}
else
{
CString str;
GetDlgItemText(IDC_EDIT,str);
CDC *pDC=GetDC();
edit.ShowWindow(SW_HIDE);
pDC->TextOut(m_ptPoint.x,m_ptPoint.y,str);
flag=0;
}

CView::OnLButtonDown(nFlags, point);
}
void CTest10View::OnInitialUpdate()
{
CView::OnInitialUpdate();

// TODO: Add your specialized code here and/or call the base class
CRect rect(100,100,160,120);
edit.Create( WS_CHILD | WS_BORDER,rect,this,IDC_EDIT);

}
rwujie 2006-12-04
  • 打赏
  • 举报
回复
楼上的,本人还是菜鸟级别的,请指教下面的功能如何用代码完成?
当用鼠标点下的时候 就在鼠标点的地方动态创建一个EDIT,但是这个EDIT是不可见的,或者你可以设置为一个别的样式。
用这个edit来接收你输入的文, 当按下回车 或者鼠标点击到别的区域的时候,就把该EDIT所接收的文字textout到你第一次用鼠标点中的位置。
一分之千 2006-11-30
  • 打赏
  • 举报
回复
楼上的你说的也太精简了吧。悟性还没有到那种程度。
==================================
已经说的很详细了啊?
当T被选中的时候就表示你要输入文字了呗?
这时候你可以用鼠标到编辑区域选择输入点。当用鼠标点下的时候 就在鼠标点的地方动态创建一个EDIT,但是这个EDIT是不可见的,或者你可以设置为一个别的样式。
用这个edit来接收你输入的文, 当按下回车 或者鼠标点击到别的区域的时候,就把该EDIT所接收的文字textout到你第一次用鼠标点中的位置。
devinside 2006-11-30
  • 打赏
  • 举报
回复
mark
rwujie 2006-11-29
  • 打赏
  • 举报
回复
楼上的你说的也太精简了吧。悟性还没有到那种程度。
neosu 2006-11-29
  • 打赏
  • 举报
回复
原来做过一个
选文字工具"T"
在画布上点击
生成一个Edit框接收输入
完成后得到内容, 用TextOut画在界面上
rwujie 2006-11-29
  • 打赏
  • 举报
回复
不是那么简单的,还要设置光标,就是和微软自带的画图板功能一样,在画图的过程中,如果要输入文字,就只要选择对应的工具,然后选择输入的位置,这样就可以把文字输如了,谁有没有源程序?
jixingzhong 2006-09-12
  • 打赏
  • 举报
回复
可以用很多中方法...

比如:
加一个字体设置 CFontDialog,
用一个 CString 保存用户的输入(WM_CHAR消息接收并保存)
然后用 DC 显示就是了
最近一个类似Windows画图板的小程序,拿来和大家分享一下。功能和界面全部模仿于Windows自带的画图板,界面如截图。功能主要有: 手绘线、简单图形、文字输入、图块拖放、重复撤销、画面缩放、打开保存图片文件,另外为了直接从数据库或者XML中存取图片,另外还提供了从Base64编码存取图片的接口,其他还实现了和画图板同样效果的工具箱及颜料盒。 1、 绘图: 绘制功能主要在OnLButtonDown、OnMouseMove、OnLButtonUp中实现,根据当前选择的工具和工具的样式进行绘制。程序中每种工具的绘制都是通过一个图元对象实现,比如钢笔、画刷因为本质上都是手绘线所以都通过CDrawPen来实现、直线和矩形等都通过CDrawShape来实现,所有的图元对象都放在文件DrawObject.h中,具体的实现请参见代码。 另外为了避免屏幕的闪烁,程序中了两个处理:一、把视图自己的重绘背景代码屏蔽掉,即响应视图的WM_ERASEBKGND消息,直接返回TRUE,并在Ondraw中程序自己绘制背景就可以了;二,在Ondraw中绘制的时候,先绘制到内存DC中,然后再贴回视图的DC。这样就基本上就可以避免屏幕的闪烁了。 2、 撤销重: 由于整个程序较为简单,就没有采用把动作记录下来的方式,只是采取了一个较简单的方法,在每当一个图元绘制动作结束时就把画布的内容存到bmp中以备撤销,这些历史画面存放在一个bmp数组中,并定义了一个Stack类来管理该数组(此实现方式参考了在线杂志21期《类似画笔的绘图控件-卫琳》,在此表示感谢!),然后在屏幕上绘制的时候就是把当前位图贴到屏幕上,并把还没存取位图的图元绘上就行了。 3、 缩放: 一般视图缩放的实现是通过DC的两个函数来实现:SetViewportExt和SetWindowExt,但是这两个函数只在MM_ISOTROPIC和MM_ANISOTROPIC这两种映射模式下有效果,而常用的带滚动条的视图类CScrollView却不支持这两种模式(参见CScrollView::SetScrollSizes)的实现。所以只好把MFC的CScrollView的代码拿过来改了一下以支持MM_ISOTROPIC映射模式,如下所示,具体参见程序文件“ADMMScrollView.h”: ::SetMapMode(hdc,MM_ISOTROPIC); int XLogMm = ::GetDeviceCaps(hdc, HORZSIZE); int YLogMm = ::GetDeviceCaps(hdc, VERTSIZE); int XLogPix = ::GetDeviceCaps(hdc, HORZRES); int YLogPix = ::GetDeviceCaps(hdc, VERTRES); ::SetWindowExtEx(hdc,XLogMm*100,YLogMm*100,NULL); ::SetViewportExtEx(hdc,(int)(XLogPix*fZoomScale), (int)(YLogPix*fZoomScale),NULL); 4、 工具箱: 首先为了实现工具箱的按钮分两列显示的效果,需要设置一下按钮的TBBS_WRAPPED,参见程序中的CToolPaletteBar类;然后,选择不同工具时展现出工具的样式,比如选择“直线”时列出可用的直线宽度样式,该功能通过在ToolBar上放一个CListCtrl实现,当前的工具样式通过图标的方式展现,效果和画图板的类似。 5、 颜料盒: 从CDialogBar类继承了一个类,然后在WM_PAINT响应函数里面绘制一个个小颜色矩形,并重写其OnLButtonDown、OnRButtonDown、OnLButtonDblClk来和用户交互,实现出来的效果还不错,看上去和画图板的颜料盒一样。 6、 鼠标光标样式: 首先在资源文件中增加需要的光标资源,然后在视图的OnSetCursor消息函数中调用SetCursor函数来设置光标样式就可以了,注意要判断HitTest参数是否为HTCLIENT,不然的话鼠标移到了滚动条上的时候光标还是画笔的样式就让人觉得怪怪的了。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧