【VS开发】OutputWnd自动滚动

最近在尝试VS2010中的各种新鲜插件,首先从最简单的输出窗口入手。

VS2010向导中产生的输出窗口是通过CMainFrame中的COutputWnd类的对象m_wndOutput生成的。为了向输出窗口输出文字,我自己做了一个悬浮停靠的对话框,具体方法网上参见http://blog.sina.com.cn/s/blog_6163bdeb0102dy8r.html

这个对话框上我加了一个简单的编辑框和输出按钮,点击输出按钮,在下面的输出窗口中输出文字并且自动滚动到最后一条。在此简单记录一下方法。

在输出窗口中输出文字是通过COutputWnd类中的对象COutputList m_wndOutputDebug来实现的。但是不论是COutputWnd中的m_wndOutputDebug还是CMainFrame中的m_wndOutput都是protected的。为了不破坏封装性,方法就是在CMainFrame和COutputWnd中添加函数。

有两种方法处理点击自动以对话框中”输出“按钮的消息,一种是在CMainFrame中处理,直接调用m_wndOutput,另一种就是在对话框类中处理。我采取的是后者,在对话框中处理消息,调用CMainFrame中自动定义函数,其中再调用COutputWnd中自定义函数。

 copy
  1. //自定义停靠对话框中的消息处理函数  
  2. void CMyPanDiag::OnBnClickedButtonOutput()  
  3. {  
  4.     // TODO: 在此添加控件通知处理程序代码  
  5.     UpdateData(TRUE);  
  6.     CMainFrame * pMain=(CMainFrame*)AfxGetApp()->m_pMainWnd;  
  7.     pMain->AddStrOutputDebugWnd(m_strOutput);//调用CMainFrame中的自动以函数,m_strOutput是编辑框的变量  
  8. }  
  1. // 给OutputWnd的Debug窗口添加字符串  
  2. int CMainFrame::AddStrOutputDebugWnd(CString str)  
  3. {  
  4.     m_wndOutput.AddDebugString(str);  
  5.     return 0;  
  6. }  
 copy
  1. // 给Debug窗口添加文字  
  2. int COutputWnd::AddDebugString(CString str)  
  3. {  
  4.     //添加文字  
  5.     m_wndOutputDebug.AddString(str);  
  6.     //自动滚动  
  7.     m_wndOutputDebug.SendMessage(WM_VSCROLL,SB_BOTTOM);  
  8.     return 0;  
  9. }  
这就完成了给输出窗口添加文字的功能。但是如果只是添加文字,输出窗口会保持同样位置,必须手动滑动条,才能看到新输出的文字。这是就采用消息的办法,让滚动条自动滚到最下面,这种办法比网上看到的方法都简单。
posted @ 2016-05-07 08:37  ZhangPYi  阅读(230)  评论(0编辑  收藏  举报