MFC多文档如何分割窗口

这篇具有很好参考价值的文章主要介绍了MFC多文档如何分割窗口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文记录如何在MFC多文件中分割窗口并实现窗口之间的数据传递

1、在ChildFrame中定义一个分割嵌入一个CSplitterWnd成员变量。

CSplitterWnd m_splitterWnd;

2、创建两个对话框,设置对话框的属性:将‘样式’设置为‘下层’;禁止使用标题栏;边框选择‘调整大小’;其他格式暂时都不设置;

MFC多文档如何分割窗口

 文章来源地址https://www.toymoban.com/news/detail-461145.html

MFC多文档如何分割窗口

 

 

MFC多文档如何分割窗口

 

 

 为对话框添加类,类名CLeftView和CRightView;父类选择为CFormView;

我们希望左边的对话框输入两个加数,通过点击按钮将两个加数传递给文本,文本计算两个加数的和并传递给右边的对话框,并将结果输出在右边的编辑框中。之后点击右边对话框中的按钮又可以将值传递给左边的对话框,并将传递的数据显示在左边的编辑框中,因此为图中各个编辑框添加CString类型的值变量,并设置各个控件ID。右边编辑框的ID为IDC_EDIT_RESULT,左边编辑框从上到下的ID分别为IDC_EDIT_NUM1、IDC_EDIT_NUM2、IDC_EDIT_SUM。

在CLeftView中添加如下变量

public:
	// 第一个加数
	CString num1;
	// 第二个加数
	CString num2;
	// 两个加数的和
	CString sum;

在CRightView中添加如下变量

public:
	// 两个加数的结果
	CString result;

由于通过文本进行交互,故需要在文本CSplitDoc中添加如下变量

public:
	CString m_num1;
	CString m_num2;
	CString m_sum;
	CString m_result;

3、接下来开始分割窗口,由于是多文档结构,故在子框架中进行分割,在ChildFrame中重写OnCreateClient函数。

BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	// TODO: 在此添加专用代码和/或调用基类
	CRect rect;
	GetClientRect(&rect);
	m_splitterWnd.CreateStatic(this, 1, 2);//一行两列
	m_splitterWnd.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(rect.Width() / 4, rect.Height()), pContext);//第一行第一列中放入第一个对话框
	m_splitterWnd.CreateView(0, 1, RUNTIME_CLASS(CRightView), CSize(rect.Width() - rect.Width() / 5, rect.Height()), pContext);//第一行第二列中放入第二个对话框
	return TRUE;

	//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
}

此时运行应该可以得到如图所示的结果:

MFC多文档如何分割窗口

4、接下来考虑数据交互的问题

我们希望点击左边对话框的Button1可以实现将加数1和加数2的值传递给文本,则给Button1添加事件处理程序。并在处理程序中定义一个文档类的指针,通过指针将值传递给文档。

void CLeftView::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData();
	CSplitDoc* pDoc = (CSplitDoc*)GetDocument();
	pDoc->m_num1 = num1;
	pDoc->m_num2 = num2;
	pDoc->UpdateAllViews(NULL);
}

 那么对于数据接收呢,要在右边的对话框中接收,则在CRightView中重写ondraw函数

void CRightView::OnDraw(CDC* pDC)
{
	// TODO: 在此添加专用代码和/或调用基类
	CSplitDoc* pDoc = (CSplitDoc*)GetDocument();
	ASSERT_VALID(pDoc);
	pDoc->m_sum = pDoc->m_num1 + pDoc->m_num2;
	//pDC->TextOutW(500, 200, pDoc->m_sum);
	SetDlgItemText(IDC_EDIT_RESULT, pDoc->m_sum);
}

 同样的,在右边对话框要向左边对话框传递数据也是一样的,具体代码如下:

void CRightView::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData();
	CSplitDoc* pDoc = (CSplitDoc*)GetDocument();
	pDoc->m_result = result;
	pDoc->UpdateAllViews(NULL);
}
void CLeftView::OnDraw(CDC* /*pDC*/)
{
	// TODO: 在此添加专用代码和/或调用基类
	CSplitDoc* pDoc = (CSplitDoc*)GetDocument();
	ASSERT_VALID(pDoc);
	SetDlgItemText(IDC_EDIT_SUM, pDoc->m_result);
}

至此,基本上完成了两个分割视图的数据交互。这里我认为接收的代码不一定要重写ondraw函数,不过还是在尝试阶段,先在ondraw中接收吧。下面是程序运行的结果:

MFC多文档如何分割窗口

MFC多文档如何分割窗口 

MFC多文档如何分割窗口 

 

到了这里,关于MFC多文档如何分割窗口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MFC】06.MFC六大机制:窗口创建机制-笔记

    接上文【MFC】05.MFC第一大机制:程序启动机制-笔记,这一篇文章来带领大家逆向分析MFC第二大机制:窗口创建机制的源码。 我们知道,在Win32编程中,如果我们要创建一个窗口,基本步骤为: 注册窗口 创建一个窗口,必须要给一个类名称 消息处理回调函数 那么MFC的窗口创建

    2024年02月13日
    浏览(32)
  • 【MFC】06.MFC第二大机制:窗口创建机制-笔记

    接上文【MFC】05.MFC第一大机制:程序启动机制-笔记,这一篇文章来带领大家逆向分析MFC第二大机制:窗口创建机制的源码。 我们知道,在Win32编程中,如果我们要创建一个窗口,基本步骤为: 注册窗口 创建一个窗口,必须要给一个类名称 消息处理回调函数 那么MFC的窗口创建

    2024年02月14日
    浏览(39)
  • MFC 隐藏窗口

    亲测能用 改变主窗体的创建方式 将 C***App::InitInstance() 函数中的代码 替换为

    2024年02月11日
    浏览(35)
  • mfc 浮动窗口

    参考 MFC模拟360悬浮窗加速球窗口

    2024年02月09日
    浏览(42)
  • MFC窗口透明化以及透明穿透

    MFC编程时,有时候我们需要实现窗口透明化,可以通过SetLayeredWindowAttributes设置窗口透明色和透明度来实现窗口透明化。而要使窗口拥有透明效果,前提是窗口要有WS_EX_LAYERED扩展属性,需用SetWindowLong设置窗口支持拓展风格。 一、窗口透明化说明 1.窗口透明化有三种模式: 第一

    2024年02月09日
    浏览(38)
  • MFC 第二部分 : 窗口类成员接口

    所有窗口类的基类:类 CWnd,封装了 Windows 窗口句柄 HWND。 成员函数 DestroyWindow 可以消毁 Windows 窗口,而不需要消毁 CWnd 对象。 m_hWnd 与该 CWnd 对象相关联的 Windows 窗口句柄(HWND); 窗口大小和位置 GetWindowRgn 获得窗口的窗口区域的拷贝 SetWindowRgn 设置窗口区域 IsIconic 判断窗口是

    2024年02月06日
    浏览(39)
  • MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现

    只说实现,不讲原理 环境:VS2022 community版 0.先建立一个全局调用的主对话框的指针g_pMainThis; 1.建立一个基于对话框的MFC工程; 2.在预编译头文件“phc.h”或“stdafx.h”定义消息调用的宏,其值要“WM_USER+100”以上; 3.在主对话框类建立消息映射的功能实现函数; 4.建立一个子

    2024年02月11日
    浏览(44)
  • Opencv显示图片(MFC基于对话框窗口)

    #1.编辑对话框按钮,修改各个按钮窗口ID和绑定变量 picture 控件 “打开图片”按钮控件 #2.编写显示图片函数 void DrawMat(cv::Mat img, UINT nID); .h文件进行声明 .cpp进行定义 #3.定义CString fun_LoadImg();函数 .h文件进行声明 .cpp文件进行定义 #4.双击“打开图片”按钮 系统自动弹出响应函数

    2024年04月15日
    浏览(53)
  • 【MFC】10.MFC六大机制:RTTI(运行时类型识别),动态创建机制,窗口切分,子类化-笔记

    C++: ##是拼接 #是替换成字符串 这是MFC提供的运行时类信息的使用,如果我们自己创建一个类,如果想用这些方法,必须要满足三个条件: 这个类必须继承于CObject类 类内必须声明DECLARE_DYNAMIC 类外必须实现IMPLENENT_DYNAMIC 我们来看看是如何实现的: 这里给出RTTI的图,每一个类中

    2024年02月13日
    浏览(40)
  • strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 由于整个系列的实战都涉及到消息生产和消费,所以咱们需要一套监控服务,用于观察各种操作的效果,例如生产消息是否成功、消息是否被消费、有没有发生堆积等 因此,在前文完成了最基本的部

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包