为MFC界面添加一个Log Window
前言
由于早期的图像处理程序基于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文件中
- 在此处增加
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的更多相关文章
- iOS 11开发教程(十三)iOS11应用编辑界面添加视图
iOS 11开发教程(十三)iOS11应用编辑界面添加视图 在iOS中添加视图的方式有两种:一种是使用编辑界面添加视图:另一种是使用代码添加视图.以下是这两个方式的详细介绍. 1.编辑界面添加视图 使 ...
- MFC+WinPcap编写一个嗅探器之二(界面)
选择新建->项目->MFC应用程序->基于对话框完成,这里文件名为sniffer 打开资源视图中的Dialog列表,打开项目总默认创建的话框,将对话框中的所有控件删除,之后按照最终效 ...
- VC/MFC如何添加启动界面
2015-05 转自 香远益清原文VC/MFC如何添加启动界面 1.基于框架类的应用程序添加启动画面的步骤(利用组件库中的Splash Screen组件生成Splash1.cpp 和Splash1.h ...
- swing实现QQ登录界面1.0( 实现了同一张图片只加载一次)、(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件)
swing实现QQ登录界面1.0( 实现了同一张图片只加载一次).(以及实现简单的布局面板添加背景图片控件的标签控件和添加一个关闭按钮控件) 代码思路分析: 1.(同一张图片仅仅需要加载一次就够了,下 ...
- MFC如何添加系统消息处理函数?
http://zhidao.baidu.com/question/318026804.html 在MFC程序中,我们并不经常直接调用Windows API,而是从MFC类创建对象并调用属于这些对象的成 ...
- DHTMLX 前端框架 建立你的一个应用程序教程(三)--添加一个菜单
菜单的介绍 这篇我们介绍将菜单组建添加到上节中的布局中: 我们不对菜单做任何处理 只是在这里填充作为界面的一部分. 这里我们介绍的是dhtmlxMenu 组件. 这个组件的数据我们可以从XML或者J ...
- MFC+WinPcap编写一个嗅探器之六(分析模块)
这一节是程序的核心,也是最复杂的地方 首先需要明白的一点是,一般对于一个有界面的程序来说,往往需要多线程.本程序中除了界面线程外,抓包需要另外创建一个新的线程.在写抓包函数之前,首先要将前面两个模块的 ...
- MFC+WinPcap编写一个嗅探器之一(准备)
知识准备: MFC:http://www.jizhuomi.com/software/257.html WinPcap:http://www.ferrisxu.com/WinPcap/html/ind ...
- RK平台Android4.4 添加一个新的遥控器支持以及添加特殊按键【转】
本文转载自:http://blog.csdn.net/coding__madman/article/details/52904063 版权声明:本文为博主原创文章,未经博主允许不得转载. 瑞芯微平台 ...
随机推荐
- php乱码
1:php 编码是utf-8 但是接口需要是gbk 这么办?? $message = "你的微点管理地址为:".$shortUrl." [请保存信息]"; // ...
- SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...
- 设计模式之美:Prototype(原型)
索引 别名 意图 结构 参与者 适用性 缺点 效果 相关模式 命名约定 实现 实现方式(一):使用一个原型管理器. 实现方式(二):使用浅拷贝实现克隆(Clone)操作. 实现方式(三):使用深拷贝实 ...
- Sqoop2 环境搭建
原文地址:http://www.cnblogs.com/luogankun/p/4209017.html 正在准备做Spark SQL external data source与关系型数据库交互的部分 ...
- PowerDesigner 15.1 安装步骤详细图解及破解
准备工作: 下载 PowerDesigner 15.1 的安装文件和破解文件 PowerDesigner 15.1 下载地址:http://pan.baidu.com/share/link?share ...
- 如何启动/停止/重启MySQL
启动.停止.重启 MySQL 是每个拥有独立主机的站长必须要撑握的操作,下面为大家简单介绍一下操作方法: 一.启动方式 1.使用 service 启动:service mysqld start 2.使 ...
- MongoDB学习笔记——索引管理
索引 索引能够提升查询的效率.没有索引,MongoDB必须扫描集合中的所有文档,才能找到匹配查询语句的文档. 索引是一种特殊的数据结构,将一小块数据集保存为容易遍历的形式.索引能够存储某种特殊字段或字 ...
- iOS10 相机相册等权限的使用、检测并引导用户开启权限
<!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问 ...
- MS SQL SERVER索引优化相关查询
查找缺失索引 -- ============================================= -- Description: 查询当前数据库中缺失的索引,知道你进行优化的 ...
- 一个4节点Hadoop集群的配置示例
环境: 操作系统:CentOS 6.5 64bit Hadoop:Version 1.2.1 Servers:hadoopnamenode,hadoop2ndnamenode,hadoopdatano ...