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

szamwaytoo

szamwaytoo

2016-01-29 12:05

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

实现类似VC中可设断点的编辑窗口
作者: cuick

下载本文示例源代码

运行效果图如下:



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

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)

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!大功告成!!(^%$#@#@$#$$%……呵呵,俺想起小宝…………)

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/)
展开更多 50%)
分享

猜你喜欢

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

C语言教程 C语言函数
实现类似VC中可设断点的编辑窗口

VC中ftp协议实现多线程断点续传

编程语言 网络编程
VC中ftp协议实现多线程断点续传

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

VC实现类似EXCEL的报表类库

编程语言 网络编程
VC实现类似EXCEL的报表类库

轻松实现类VC界面(窗口停靠)

编程语言 网络编程
轻松实现类VC界面(窗口停靠)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

在VC中隐藏控制台程序窗口的实现代码

编程语言 网络编程
在VC中隐藏控制台程序窗口的实现代码

使用VC6.0实现窗口的任意分割

C语言教程 C语言函数
使用VC6.0实现窗口的任意分割

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

VB中用API实现文件拖放

VB中用API实现文件拖放

几个漂亮的Button的CSS

几个漂亮的Button的CSS
下拉加载更多内容 ↓