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

想做一个跟踪调试工具,于是到网上找类似VC可设置断点的EditView,可惜没找到(呵呵,俺E文不好,没去国外站点找)。那就自己做一个吧!!
还好,今天终于做好了,拿出来与大家分享。

步骤/方法

  • 01

    创建一个工程记住要选CeditView. 在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);  //设置输入的最大文本 保存断点的行号我用STL的list。 AddRemoveBP(int point) { IntList::iterator it; it = find(lBreakPoint.begin (), lBreakPoint.end (), point); if( it != lBreakPoint.end () )   //如果此行为设置了断点的行则删除否则添加 lBreakPoint.erase (it); else lBreakPoint.push_back (point); }

  • 02

    添加一个用于描画左边显示条的函数 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 (); }

  • 03

    处理鼠标左键单击,添加删除断点。 if(point.x < m_LineHeight+6) { point.x += 20; CEdit& theEdit = GetEditCtrl (); int n = theEdit.CharFromPos(point); AddRemoveBP(HIWORD(n)+1); } 再加一个热键处理得到当前光标所在的行。 CEdit& theEdit = GetEditCtrl (); int newpoint = theEdit.LineFromChar (-1) + 1; AddRemoveBP(newpoint); 在一些必要的消息处理后面调用PaintLeft。

(0)

相关推荐

  • word 中怎么设50磅字体

    word 中怎么设50磅字体(不是50号)?今年计算机考试一考题,找半天没找到在哪设磅数! 选中文字,直接在字号框里手动输入50,回车 或者,选中文字,按CTRL+]号不停探险,直到50为止 那个设定 ...

  • 如何解决VC中的Error spawning cl.exe?

    如何解决VC中的Error spawning cl.exe? 我来告诉你,一看就懂了 操作方法 01 打开你的vc,点击"工具",如图 02 点击"选项',新窗口如图所示 ...

  • VC中如何修改右键弹出的菜单的内容

    摘要:关于VC中如何修改右键弹出的菜单的内容的深入研究. 步骤/方法 01 CMenu menu; ClientToScreen(&point); VERIFY( menu.LoadMenu( ...

  • Visual C++调试工具中如何使用断点

    摘要:关于Visual C++调试工具中如何使用断点的深入研究. 步骤/方法 01 断点(BreakPoint)是运行你向调试器描述环境. 02 并让调试器设置好程序状态的一种机制. 03 如果没有断 ...

  • 在VC中实现画任意方向椭圆

    摘要:关于在VC中实现画任意方向椭圆的深入研究. 步骤/方法 01 下面是利用CWzjEllipse类是绘制椭圆的代码: const double PI = 3.14159265; //获取绘图设备环 ...

  • vc++中ocx的调试方法

    摘要:关于vc++中ocx的调试方法的深入研究. 步骤/方法 01 VC++自带有一个调试控件的工具"ActiveX控件测试容器",通过三种方式可以打开: 点击"调试&q ...

  • 在AutoCAD2008中如何使用夹点编辑图形对象

    在AutoCAD2008中如何使用夹点编辑图形对象 命令: grips 输入 GRIPS 的新值 <0>:2 点取选择的对象,然后会出现关键点,移动、拉伸关键点位,就会出现虚拟的效果。 ( ...

  • 千千静听中怎么对歌词进行编辑调整和上传

    怎样使用千千静听对歌词进行编辑调整和上传: 1、在播放列表中选中您想要编辑歌词的曲目 2、在千千歌词秀显示窗口单击鼠标右键,在菜单中选择“编辑歌词”,进入歌词编辑模式。 如下图所示: 3、点击编辑模式 ...

  • 如何将Word文档设为限制编辑

    Word是现在十分常见的文件类型之一,有些用户出于安全考虑,想知道如何将Word文档设为限制编辑,接下来小编就给大家介绍一下具体的操作步骤.具体如下:1. 首先第一步先打开电脑中的Word文档,接着根 ...