为MFC界面添加一个Log Window
来源:互联网 发布:java枚举类型有什么用 编辑:程序博客网 时间:2024/05/16 00:38
由于早期的图像处理程序基于VC6.0,MFC也是采用VC6.0开发的。在实际处理中,我不仅需要界面的显示,有很多时候,我需要算法处理的过程中的信息,比如每个阶段的耗时,处理的图像大小,以及如果需要迭代,当前的迭代次数。
当然,有很多方法可以解决上述需求,譬如可以通过FILE创建一个文件,然后把相关信息写入。
但,那都不够直观
我希望的是,它能够像VC或VS在编译的时候,在下方有个「debug window」,将运行过程中的信息实时显示。
第一步 创建一个single document view
JUST勾一个选项即可,
第二步 在Resource栏进行设置
注意,这里的Dialog应该选择formview
并且布局设置如下,上面的EDIT控件为Edit Box
第三步 修改MainFrm类
在头文件MainFrm.h中,增加一个DialogBar成员变量
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
…
CDialogBar m_wndDlgBar; // 控制下方的Dialog控件
对OnPaint函数进行重写(这里应该是一个虚函数)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
…
afx_msg void OnPaint(); // 重写OnPaint()函数,用以控制控件的显示
在MainFrm.cpp文件中
1) 在此处增加ON_WM_PAINT()
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_WM_PAINT() // 让自己写的OnPaint函数起作用
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
2)在OnCreate中添加DialogBar的创建函数
// 设置DialogBar的创建
if (!m_wndDlgBar.Create(this, IDD_DLGLOG,
WS_CHILD | CBRS_BOTTOM | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_GRIPPER, IDD_DLGLOG))
{
TRACE0(“Failed to create DlgBar\n”);
return -1;
}
m_wndDlgBar.EnableDocking(CBRS_ALIGN_ANY);
3)通过OnPaint函数控制大小
// 控制DialogBar 与 EditLog 的大小
void CMainFrame::OnPaint()
{
CPaintDC dc(this); // device context for painting
// 控制日志窗口的CDialogBar大小和编辑框CEdit大小CRect barrect;m_wndDlgBar.GetClientRect(&barrect);CRect barborders;barborders = m_wndDlgBar.GetBorders();m_wndDlgBar.GetDlgItem(IDC_EDITLOG)->MoveWindow(barborders.left, barborders.top, barrect.Width()-barborders.left-barborders.right, barrect.Height()-barborders.top-barborders.bottom);
}
在此有个小插曲,如果想让MFC左上角的无标题等标题状态替换成自己想要的,则,在OnCreate函数中添加
SetWindowText( “Demo”); // 设置标题为Demo
并在BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)函数中添加这么一行:
cs.style &= ~FWS_ADDTOTITLE; // 让以上设置的标题得以显示
第四步 其它文件可以通过LogWindow输出信息
首先在该文件中增加一个外部变量,譬如我们要在LogWndDoc.cpp上要使用,则在文件前面加入:
extern CLogWndApp theApp;// 申明外部变量
为了测试效果,通过classwizard在LogWndDoc.cpp上增加一个void CLogWndDoc::OnFileOpen()函数,如下,即可将信息从Log Window上输出信息,代码:
void CLogWndDoc::OnFileOpen()
{
// TODO: Add your command handler code here
//设置CEdit指针,指向Log窗口的输入 (注意添加相应的头文件)
CEdit* pLogWnd = (CEdit*)( (CMainFrame*)theApp.GetMainWnd() )->GetDescendantWindow(IDC_EDITLOG);
DWORD dwSel = pLogWnd->GetSel();
pLogWnd->SetSel(0, -1, FALSE);
pLogWnd->Clear();
CString sOutput="Hello, my Log Window !!!\r\n";pLogWnd->ReplaceSel((LPCTSTR)sOutput, TRUE);
}
最终效果如下:
- 为MFC界面添加一个Log Window
- vs2010 mfc添加一个管理员登录界面,登录成功显示主界面
- MFC 在一个项目中添加log文件的读写操作问题
- 为window添加新成员
- VS2010/MFC编程入门之二(Ribbon界面开发:为Ribbon Bar添加控件)
- VS2010/MFC编程入门之五十三(Ribbon界面开发:为Ribbon Bar添加控件)
- 在已经做好的MFC项目中添加一个登陆界面
- MFC SDI中添加Split Window
- MFC为按钮添加BITMAP
- MFC为对话框添加背景图片
- MFC 为按钮添加图片
- VC/MFC如何添加启动界面
- VC/MFC如何添加启动界面
- MFC添加消息、隐藏对话框项目界面
- MFc界面添加滚动条笔记
- VC/MFC如何添加启动界面
- MFC添加界面的背景图片方法总结
- VC/MFC如何添加启动界面
- 分享2016支付宝,财付通,微信免签约即时到账接口
- 24-mysql新安装如何修改密码
- DirectX SDK (June 2010) 安装图
- 2016.11.05 连续第三天总结
- 位运算
- 为MFC界面添加一个Log Window
- 有趣的Linux命令行功效
- 数据结构示例之带头节点的双向循环链表
- spring的声明式事物管理
- 8086逻辑运算和移位
- 2016.11.05 111
- Action中取得request,session的四种方式
- a case of table cell cover other cell
- artTemplate模板试用2