MFC DockPane 分割窗口 嵌入对话框
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 分割窗口 嵌入对话框相关推荐
- 黑马程序员mfc中分割窗口---ctreeview未定义基类的解决方法
在跟班黑马程序学mfc中分割窗口,vs2019出现了以下的错误.解决方法很简单. 首先我们点击错误,自动定位到出错的类,会发现出错的是CSelcetView的头文件和源文件出错, 我们找到头文件中 在 ...
- 【数字图像处理】 二.MFC单文档分割窗口显示图片
本文是讲述<数字图像处理>系列文章,继上篇讲述BMP格式图片和显示后,该篇讲述如何对单文档进行分割.主要是采用CSplitterWnd静态分割窗口显示图片等相关知识.本文主要结合自己的课程 ...
- VS2019/MFC编程入门——文档、视图和框架:分割窗口
上一节中讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...
- vs2010c语言窗口程序,VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)...
上一节中鸡啄米讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型 ...
- MFC中,如何获得对话框控件相对于父窗口(对话框窗口)的位置
在MFC中,如何获得对话框控件相对于父窗口(对话框窗口)的位置: CRect r; pWnd->GetWindowRect(&r); 这样获得的r是控件相对于屏幕的坐标,然后用Scre ...
- MFC开发过程中,自定义的类中做分割窗口的图像显示,GetDC出现问题:function does not take 0 parameters?
做MFC分割窗口时,其中含有视类CxxVew窗口,含有General Class (自定义的类CMyXX),在CMyXX中使用GetDC时: CDC* pDC = GetDC(); 出现标题中的问题, ...
- 鸡啄米vc++2010系列40(文档、视图和框架:分割窗口)
分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图. MFC分割窗口的方式有两种,动态分割和静态分割. 动态分割窗口通 ...
- VS2010-MFC(文档、视图和框架:分割窗口)
转自:http://www.jizhuomi.com/software/226.html 上一节讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 ...
- Windows核心编程_将窗口嵌入到桌面图标下面不被遮挡 spy 分析过程
近年很流行动态视频桌面,实则上早期的windows vista系统上有一个Windows DreamScene软件将桌面壁纸设置成视频,但是是收费的! 首先先来观察一下Windows桌面的组成单元: ...
最新文章
- CPU 核数与线程数有什么关系?
- 鸿蒙系统怎么支持安卓应用,鸿蒙系统支持安卓软件吗-鸿蒙系统支持安卓应用吗...
- 神策 FM:Airbnb 如何通过用户体验预测用户复购?
- ozf oracle,ORACLE EBS 简称大全
- weblogic命令行操作
- 两个音轨合并_两个双音轨mkv视频合并保持原双音轨不变 MKV怎么合并视频,合并之后仍保留MKV的双音轨...
- 如何解决IIS配置报错问题:存储空间不足?
- 苹果Swift语言入门教程【中文版】
- 进程全家桶,看这一篇就够了 | 原力计划
- java中处理异常怎么越过,java – Spring Batch – 异常不可跳过
- [RK3399][Android7.1] Display系统中的DRM模块介绍
- 真心实用!Python 办公自动化之 PDF 的详细操作(全)
- glsurfaceview 和 open gl
- <爬虫> 豆瓣电影排行榜(含代码)
- [维修笔记]关于红米2A手机无限重启的维修
- Android音视频开发(一)——音视频开发流程
- WebService(1) 调用第三方服务
- adf的主要功能之一是_ADF软件介绍
- [lua] 用lua实现扑克游戏发牌的逻辑代码
- 【企业微信-客户服务】错误代码:48002, 错误信息:API接口无权限调用