首 页 ┆ 源码下载 ┆ IT学院 ┆ 字体下载 ┆ 模板下载 ┆ 源码发布 ┆ 广告合作 ┆ 网站地图 ┆ 虚拟主机 ┆ 中文域名
► 设为首页
► 加入收藏
► 联系我们
源码下载 >> ASP源码 | PHP源码 | ASP.net源码 | JSP源码 | CGI源码 | VC/C++源码 | VB源码 | Delphi源码 | Flash源码
文章学院 >> 网络编程 | 网页设计 | 图形图象 | 数据库 | 服务器 | 网络媒体 | 网络安全 | 操作系统 | 办公软件 | 软件开发 | 黑客知识
字体下载 >> 精制字体 | 非英字体 | 艺术字体 | 著名字体 | 哥特式 | 简单字体 | 手写体 | 节假日 | 图案字体 | 精度像素 | 中文字体
模板下载 >> 企业门户 | 数码网络 | 休闲娱乐 | 影视音乐 | 旅游名胜 | 文化艺术 | 电子商务 | 个性展示 | 登陆导航 | Flash模板
►►您当前的位置:源码园 → IT学院 → 软件开发 → VC编程 → 文章内容

实现类似VC中可设断点的编辑窗口

作者:佚名  来源:网上收集  发布时间:2007-3-27 10:14:46
 

实现类似VC中可设断点的编辑窗口VC可设置断点的EditView,可惜没找到(呵呵,俺E文不好,没去国外站点找)。那就自己做一个吧!!
唉!!为了这个小东西俺可是走了不少弯路!!
还好,今天终于做好了,拿出来与大家分享。

作者: cuick

下载本文示例源代码

运行效果图如下:



想做一个跟踪调试工具,于是到网上找类似

1、 创建一个工程………………俺不多说了,记住要选CeditView.
2、 在OnInitialUpdate()中设置EDIT的Margin,当然留出的空间用来画断点或行号等。并得到行高。

SIZE size;GetTextExtentPoint(GetDC()->GetSafeHdc (),"A",1,&size);m_LineHeight = size.cy;//得到行的高度CEdit& theEdit = GetEditCtrl ();theEdit.SetMargins (m_LineHeight+6,0);//设置编辑框的左边界theEdit.SetLimitText(10 * 1024);//设置输入的最大文本
3、保存断点的行号我用STL的list。
AddRemoveBP(int point){IntList::iterator it;it = find(lBreakPoint.begin (), lBreakPoint.end (), point);if( it != lBreakPoint.end () ) //如果此行为设置了断点的行则删除否则添加lBreakPoint.erase (it);elselBreakPoint.push_back (point);}
4、添加一个用于描画左边显示条的函数
PaintLeft(){CBrush brushb(RGB(245,245,230));int m_breakpoint;CDC* hdc;hdc = GetWindowDC();CRect rect;GetClientRect(&rect);hdc->FillRect (CRect(rect.left+2 ,rect.top+2 ,rect.left + m_LineHeight + 7,rect.Height ()+2),&brushb);//画底色brushb.DeleteObject ();CEdit& theEdit = GetEditCtrl ();int nFirstVisible = theEdit.GetFirstVisibleLine();//得到当前显示的最上端的行号CBrush OrigBrush,brushf(RGB(255,0,0));CBrush *oldBrush = (CBrush*)hdc->SelectObject (brushf);OrigBrush.FromHandle((HBRUSH)oldBrush);IntList::iterator it;for(it = lBreakPoint.begin(); it != lBreakPoint.end(); it++){m_breakpoint = *it;if(m_breakpoint > nFirstVisible){int point = (m_breakpoint-1 - nFirstVisible)*m_LineHeight +3;//计算断点位置if(point < (rect.bottom - m_LineHeight+1)){hdc->Ellipse(rect.left + 5, point, rect.left+ m_LineHeight + 4,point+m_LineHeight);//画断点}}}hdc->SelectObject (&OrigBrush);OrigBrush.DeleteObject();brushf.DeleteObject ();}
5、处理鼠标左键单击,添加删除断点。
if(point.x < m_LineHeight+6){point.x += 20;CEdit& theEdit = GetEditCtrl ();int n = theEdit.CharFromPos(point);AddRemoveBP(HIWORD(n)+1);}
6、再加一个热键处理得到当前光标所在的行。
CEdit& theEdit = GetEditCtrl ();int newpoint = theEdit.LineFromChar (-1) + 1;AddRemoveBP(newpoint);
7、在一些必要的消息处理后面调用PaintLeft。OK!大功告成!!(^%$#@#@$#$$%……呵呵,俺想起小宝…………)
[] [返回上一页] [打 印]
  • 上一篇文章:增强GridCtrl
  • 下一篇文章:一个实用的CToolBar扩展类CToolBarEx

  • 相关文章:
  • [图文]在MDI程序中实现类似WPS2000的文件切换标签
  • [图文]实现类似VC中可设断点的编辑窗口
  • [图文]实现类似Excel和Visual C++里文件夹式样的标签...
  • [组图]实现类似Excel和Visual C++里文件夹式样的标签...
  • [组图]实现类似Excel和Visual C++里文件夹式样的标签...
  • 如何实现类似VC属性表中的钉子按钮
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 源码发布
Copyright © 2003-2009 Ymyasp.Com. All Rights Reserved .
备案序号:粤ICP备07029071号