MFC DockPane 分割窗口

  • 创建工程
    • 1.生成MFC工程
    • 2.新建基类为CDockablePane的C++类
      • 2.1 新建CObjectWnd类
      • 2.2 在CMainFrame中操作
    • 3.新建对话框类,在停靠窗口中写入对话框
      • 3.1 新建对话框资源
      • 3.2 在停靠窗口中嵌入对话框
    • 4.在对话框中添加控件,使控件大小随拖动进行变化
    • 5.完成

创建工程

1.生成MFC工程


一直下一步不进行更改。


view中的基类选择CFormView

2.新建基类为CDockablePane的C++类

2.1 新建CObjectWnd类

#pragma once#include "ShowProcess.h"
// CObjectWndclass CObjectWnd : public CDockablePane
{DECLARE_DYNAMIC(CObjectWnd)public:CShowProcess dlg;public:CObjectWnd();virtual ~CObjectWnd();protected:DECLARE_MESSAGE_MAP()
public:afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnSize(UINT nType, int cx, int cy);
};
// ObjectWnd.cpp : 实现文件
//#include "stdafx.h"
#include "MyDemo.h"
#include "ObjectWnd.h"// CObjectWndIMPLEMENT_DYNAMIC(CObjectWnd, CDockablePane)CObjectWnd::CObjectWnd()
{}CObjectWnd::~CObjectWnd()
{}BEGIN_MESSAGE_MAP(CObjectWnd, CDockablePane)ON_WM_CREATE()ON_WM_SIZE()
END_MESSAGE_MAP()// CObjectWnd 消息处理程序int CObjectWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{if (CDockablePane::OnCreate(lpCreateStruct) == -1)return -1;dlg.Create(IDD_DIALOG_PROCESS,this);dlg.ShowWindow(SW_SHOW);return 0;
}void CObjectWnd::OnSize(UINT nType, int cx, int cy)
{CDockablePane::OnSize(nType, cx, cy);if (dlg.GetSafeHwnd()){CRect rect;GetClientRect(rect);dlg.MoveWindow(rect);}}

2.2 在CMainFrame中操作

新建变量m_wndObject

新建函数:CreateDockingWindows()

BOOL CMainFrame::CreateDockingWindows()
{CString strObjectView("处理过程");if (!m_wndObject.Create(strObjectView, this, CRect(0, 0, 200, 200), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){TRACE0("未能创建“面向对象”窗口\n");return FALSE; // 未能创建}}

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
中添加:

 CreateDockingWindows();m_wndObject.EnableDocking(CBRS_ALIGN_ANY); //使可停靠与浮动DockPane(&m_wndObject);

以上即完成停靠窗口的创建工作。

3.新建对话框类,在停靠窗口中写入对话框

3.1 新建对话框资源

新建对话框,ID设置为IDD_DIALOG_PROCESS对话框Border属性设置为None,Style设置为Child,生成对话框类CShowProcess

3.2 在停靠窗口中嵌入对话框

CObjectWnd中定义对话框变量

CShowProcess dlg;

同时在CObjectWnd类中添加OnCreate(),OnSize()消息

int CObjectWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{if (CDockablePane::OnCreate(lpCreateStruct) == -1)return -1;dlg.Create(IDD_DIALOG_PROCESS,this);dlg.ShowWindow(SW_SHOW);return 0;
}void CObjectWnd::OnSize(UINT nType, int cx, int cy)
{CDockablePane::OnSize(nType, cx, cy);if (dlg.GetSafeHwnd()){CRect rect;GetClientRect(rect);dlg.MoveWindow(rect);}}

完成对话框的嵌入工作。

4.在对话框中添加控件,使控件大小随拖动进行变化

需要在对话框中响应OnInitDialog(),OnSize()消息
关键代码:

BOOL CShowProcess::OnInitDialog()
{CDialogEx::OnInitDialog();// TODO:  在此添加额外的初始化if (m_ListShow.GetSafeHwnd()){CRect rect;GetClientRect(rect);m_ListShow.MoveWindow(rect);}return TRUE;  // return TRUE unless you set the focus to a control// 异常: OCX 属性页应返回 FALSE
}void CShowProcess::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);// TODO: 在此处添加消息处理程序代码if (m_ListShow.GetSafeHwnd()){CRect rect;GetClientRect(rect);m_ListShow.MoveWindow(rect);}}

5.完成

MFC DockPane 分割窗口 嵌入对话框相关推荐

  1. 黑马程序员mfc中分割窗口---ctreeview未定义基类的解决方法

    在跟班黑马程序学mfc中分割窗口,vs2019出现了以下的错误.解决方法很简单. 首先我们点击错误,自动定位到出错的类,会发现出错的是CSelcetView的头文件和源文件出错, 我们找到头文件中 在 ...

  2. 【数字图像处理】 二.MFC单文档分割窗口显示图片

    本文是讲述<数字图像处理>系列文章,继上篇讲述BMP格式图片和显示后,该篇讲述如何对单文档进行分割.主要是采用CSplitterWnd静态分割窗口显示图片等相关知识.本文主要结合自己的课程 ...

  3. VS2019/MFC编程入门——文档、视图和框架:分割窗口

    上一节中讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...

  4. vs2010c语言窗口程序,VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)...

    上一节中鸡啄米讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型 ...

  5. MFC中,如何获得对话框控件相对于父窗口(对话框窗口)的位置

    在MFC中,如何获得对话框控件相对于父窗口(对话框窗口)的位置: CRect  r; pWnd->GetWindowRect(&r); 这样获得的r是控件相对于屏幕的坐标,然后用Scre ...

  6. MFC开发过程中,自定义的类中做分割窗口的图像显示,GetDC出现问题:function does not take 0 parameters?

    做MFC分割窗口时,其中含有视类CxxVew窗口,含有General Class (自定义的类CMyXX),在CMyXX中使用GetDC时: CDC* pDC = GetDC(); 出现标题中的问题, ...

  7. 鸡啄米vc++2010系列40(文档、视图和框架:分割窗口)

    分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图. MFC分割窗口的方式有两种,动态分割和静态分割. 动态分割窗口通 ...

  8. VS2010-MFC(文档、视图和框架:分割窗口)

    转自:http://www.jizhuomi.com/software/226.html 上一节讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述      ...

  9. Windows核心编程_将窗口嵌入到桌面图标下面不被遮挡 spy 分析过程

    近年很流行动态视频桌面,实则上早期的windows vista系统上有一个Windows DreamScene软件将桌面壁纸设置成视频,但是是收费的! 首先先来观察一下Windows桌面的组成单元: ...

最新文章

  1. CPU 核数与线程数有什么关系?
  2. 鸿蒙系统怎么支持安卓应用,鸿蒙系统支持安卓软件吗-鸿蒙系统支持安卓应用吗...
  3. 神策 FM:Airbnb 如何通过用户体验预测用户复购?
  4. ozf oracle,ORACLE EBS 简称大全
  5. weblogic命令行操作
  6. 两个音轨合并_两个双音轨mkv视频合并保持原双音轨不变 MKV怎么合并视频,合并之后仍保留MKV的双音轨...
  7. 如何解决IIS配置报错问题:存储空间不足?
  8. 苹果Swift语言入门教程【中文版】
  9. 进程全家桶,看这一篇就够了 | 原力计划
  10. java中处理异常怎么越过,java – Spring Batch – 异常不可跳过
  11. [RK3399][Android7.1] Display系统中的DRM模块介绍
  12. 真心实用!Python 办公自动化之 PDF 的详细操作(全)
  13. glsurfaceview 和 open gl
  14. <爬虫> 豆瓣电影排行榜(含代码)
  15. [维修笔记]关于红米2A手机无限重启的维修
  16. Android音视频开发(一)——音视频开发流程
  17. WebService(1) 调用第三方服务
  18. adf的主要功能之一是_ADF软件介绍
  19. [lua] 用lua实现扑克游戏发牌的逻辑代码
  20. 【企业微信-客户服务】错误代码:48002, 错误信息:API接口无权限调用

热门文章

  1. CENTOS 8上安装极点五笔(自已测过)
  2. steam解锁未购买游戏工具
  3. “山寨机、猪流感”的英文说法(及更多热词——每天更新)
  4. 使用DESeq2进行两组间的差异分析
  5. java使用selenium-chrome-driver实现简单的本地爬虫
  6. 树形数据的搜索方法---javascript
  7. docker-compose模板指令 命令行指令
  8. 这本书为什么会被誉为Spring开发百科全书(文末附带源码视频)
  9. ros1使用过程中遇到的问题记录
  10. vue中使用Luckysheet实现Excel的导入、在线编辑、导出等功能