MFC:CSplitterWnd和CEditView的使用

15 篇文章 0 订阅

昨天创建了一个基本的窗口,实现了呼出对话框汇报翻译情况。但翻译结果不能放在呼出的对话框中,需要建立一个和编辑区平行的区域。这里就要用到CSplitterWnd类。
CSplitterWnd可以实现对客户区的分割(单文档下),实现流程如下(参考:http://blog.csdn.net/shuilan0066/article/details/5742458):
1. 在框架类中声明一个CSplitterWnd对象
2. 重写OnCreateClient函数,在其中添加:

    GetClientRect(&rc);
    // 创建静态分割窗口,两行一列   
    if (!m_wndSplitter.CreateStatic(this, 2, 1))
        return FALSE;
    // 创建上面窗格中的视图
    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CNCCompilerView), CSize(rc.Width(), rc.Height() / 2), pContext))
        return FALSE;
    // 创建下面窗格中的视图   
    if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(OutputEditView), CSize(rc.Width(), rc.Height() / 2), pContext))
        return FALSE;

其中CreateStatic用于创建静态分割窗口,后面两个参数是分割的行列数,使用CreateView可创建对应分割窗口的视图。
这里使用继承CEditView类的OutputEditView类作为分割出来的视图类型,因为主要用于显示输出的结果。因为这里用到了该类,所以需要添加该类所在的头文件。

如何使用分割出的窗口

分割的窗口有两个,其中一个视图是之前用到的CNCCompilerView,它和一个NCCOmpilerDoc类在初始化的时候绑定并添加。也就是说可以通过文档类来获得该视图的信息。但是另一个视图并没有文档,因此必须用别的方法来调用。
这里提一种在框架类中调用的方法,用以输出文字,将下面的内容添加到消息处理函数中(暂时没有实现输出翻译结果的功能):


    auto view = (OutputEditView*)m_wndSplitter.GetPane(1, 0);
    view->SetWindowTextW(L"编译结果:\r\n第一条指令:进给速度100\r\n第二条:……");

运行结果:
这里写图片描述
相比昨天解决了UNICODE编码转换的问题,但在窗口之间的关系上迷惑了很久。

参考文章:
MFC读写文件:http://www.jizhuomi.com/software/497.html
UNICODE和ANSI转换:http://www.cnblogs.com/zhwl/archive/2012/11/09/2762983.html
判断TXT文件格式:http://blog.csdn.net/wangshiqilin_fjy/article/details/51259167
窗口拆分:http://blog.csdn.net/q1302182594/article/details/45132437
窗口拆分及其数据交换:http://blog.csdn.net/nupt123456789/article/details/7455471

总结:学习MFC这两三天,遇到的困难重重,各种诡谲的BUG让人分分钟螺旋升天(比如今天遇到的读写文件,读入UNICODE格式的文件,使用的buf是char格式的,就会导致只读一个字符,需改成宽字符wchar_t类型才行)。事实证明,对知识成体系的学习是十分必要的,单纯要用什么才去学什么是相当低效的。MFC背后的结构看似错综复杂,其实有规律可循,需要对其原理深入了解,才能更顺手地开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值