最近在尝试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中自定义函数。
- //自定义停靠对话框中的消息处理函数
- void CMyPanDiag::OnBnClickedButtonOutput()
- {
- // TODO: 在此添加控件通知处理程序代码
- UpdateData(TRUE);
- CMainFrame * pMain=(CMainFrame*)AfxGetApp()->m_pMainWnd;
- pMain->AddStrOutputDebugWnd(m_strOutput);//调用CMainFrame中的自动以函数,m_strOutput是编辑框的变量
- }
- // 给OutputWnd的Debug窗口添加字符串
- int CMainFrame::AddStrOutputDebugWnd(CString str)
- {
- m_wndOutput.AddDebugString(str);
- return 0;
- }
- // 给Debug窗口添加文字
- int COutputWnd::AddDebugString(CString str)
- {
- //添加文字
- m_wndOutputDebug.AddString(str);
- //自动滚动
- m_wndOutputDebug.SendMessage(WM_VSCROLL,SB_BOTTOM);
- return 0;
- }