RecalcLayout的作用

MFC窗口位置管理详细分析及实例 还有象单文档程序的视图窗口,多文档程序的那个MDIClient窗口,分隔条窗口,他们的id值介于下面两个id值之间: AFX_IDW_PANE_FIRST 0xE900 // AFX_IDW_PANE_LAST 0xE9FF 你要给你自己的子窗口分配id的话,别和上面的重复了。一般如果用IDE的菜单view/resource symbols项来加入自己的id的话,是不会重复的。有关 阅读详情

Called by the framework when the standard control bars are toggled on or off or when the frame window is resized.

当标准工具栏或状态栏隐藏或者显示,或者窗口调整大小时,框架调用这个方法。

 

方法原型为:

 

virtual void RecalcLayout(
   BOOL bNotify = TRUE 
);

 

Parameters
bNotify

Determines whether the active in-place item for the frame window receives notification of the layout change. If TRUE, the item is notified; otherwise FALSE.

决定是否将焦点项目传递这个变化,如果是TRUE就通知子项目,否则,不传递。

[c-sharp]  view plain copy
  1. void CMainFrame::OnViewToolbar1()  
  2. {  
  3.     // TODO: 在此添加命令处理程序代码  
  4.     m_wndToolBar1.ShowWindow(m_wndToolBar1.IsWindowVisible()? SW_HIDE:SW_SHOW);   
  5.   
  6. RecalcLayout();  
  7.   
  8.   
  9. }  

这里m_wndToolBar1是自己定义的一个工具栏,:OnViewToolbar1()是一个菜单项的消息响应函数。

当工具栏显示时,点击这个菜单项,工具栏隐藏,然后调用RecalcLayout这个方法,重新布置窗口。

当工具栏隐藏式,点击这个菜单项,工具栏显示,然后调用RecalcLayout这个方法,重新布置窗口。


同时注意:当我们把一个工具栏变为一个浮动窗口时,我们通过RecalcLayout只是把相应的工具栏隐藏了,因为浮动窗上边的内容不属于工具栏,这时,我们仅仅需要重新停靠一下即可。

在单文档程序中动态切换多个窗体的源码程序 摘要:本文通过一个程序实例描述了在VC++6.0下如何在单文档程序中通过菜单动态控制多 个窗体的切换。    一、 引言    我们在编制程序中根据需求的不同会在程序风格上选择多文档、单文档或是对话框模式 ,对于单文档模式可能是我们使用比较多的,但有时我们想采用单文档的形式显示多个不同 的窗体,如作为数据库前台应用程序就会遇到此类问题,数据库由大量的表单组成,而同常 一个窗体内只用来显示一个表单,所以要显示其他的表单时就要用到切换窗体的技术了,下 面就通过一个程序说明该技术的实现方法。    二、 实现技术    新建一个基于CFormView的单文档应用程序,再添加一个窗体和与之对应的基于 CFormView的新视类,然后通过在主框架类里添加控制代码和菜单控制实现这两个窗体的动态 切换,下面就是具体的实现过程:    (一) 用"MFC AppWizard(exe)"建立一个新项目"SwitchForm",并在第二步的创建类型上选 择为"Single documnet"单文档模式,第三、四、五、六步均取确省状态,最后一步选择 "CFormView"作为视类的基类。点按"完成"按钮,生成了初始工程"SwitchForm"。    (二) 点选菜单"Insert"、"Resource…",在弹出的"Insert Resource"对话框中"Dialog"树 里的"IDD_FORMVIEW",点击"New"按钮,生成了一个新的窗体,将其ID号改为"IDD_NEXTFORM"。 在原有的窗体上加一个静态框"这是第一个窗体";在新建的窗体上也添加一个静态框"这是第二 个窗体"。    (三) 在菜单资源的"IDR_MAINFRAME"上添加一级菜单"窗体切换",及其二级菜单"第一个窗 体"、"第二个窗体",其标识号分别为"ID_FIRSTFORM"和"ID_SECONDFORM"。修该"第一个窗体" 的属性为"Checked",表明程序初始时显示的是第一个窗体。    (四) 在"ClassView"属性页里的"SwitchForm classes"上右键,在弹出菜单上选择 "New Class…",弹出"New Class"对话框,选择"Dialog ID:"为我们刚添加的新窗体 "IDD_NEXTFORM",选择"Base class:"为"CFormView",类名取为"CNextFormView",这样就把第 二个窗体对应的视图类添加到了工程。 (五) 在框架类里添加函数SwitchToForm(): void CMainFrame::SwitchToForm(int nForm) { file://获取原来的活动窗体的视图句柄 CView* pOldActiveView = GetActiveView(); file://获取由"nForm"标识的窗体所对应的视图句柄 CView* pNewActiveView = (CView*) GetDlgItem(nForm); file://若视图句柄为空,则创建一新的。 if (pNewActiveView == NULL) { if (nForm == IDD_SW99vCHFORM_FORM) pNewActiveView = (CView*)new CSwitchFormView; if (nForm == IDD_NEXTFORM) pNewActiveView = (CView*)new CNextFormView; CCreateContext context; context.m_pCurrentDoc = pOldActiveView->GetDocument(); pNewActiveView->Create(NULL,NULL,0L, CFrameWnd::rectDefault, this,nForm,&context); pNewActiveView->OnInitialUpdate(); } file://选择pNewActiveView为活动窗体 SetActiveView(pNewActiveView); file://显示活动窗体,隐藏非活动窗体 pNewActiveView->ShowWindow(SW_SHOW); pOldActiveView->ShowWindow(SW_HIDE); int ID; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CSwitchFormView)) ID=IDD_SW99vCHFORM_FORM; if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CNextFormView)) ID=IDD_NEXTFORM; file://设置窗体的ID号 pOldActiveView->SetDlgCtrlID(ID); pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST); RecalcLayout(); }    (六)添加两个菜单相对应的命令响应函数和更新函数如下: void CMainFrame::OnFirstform() { file://通过IsKindOf函数确定当前活动窗口是否是第一个窗口,如是,则无须切换, file://否则将通过SwitchToForm函数将当前活动窗口切换到"IDD_SW99vCHFORM_FORM" file://标识的第二个窗体。 if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))) return; SwitchToForm(IDD_SW99vCHFORM_FORM); } void CMainFrame::OnUpdateFirstform(CCmdUI* pCmdUI) { file://通过IsKindOf函数判断当前活动窗口是否是第一个窗体,如是则将其选中。 pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CSwitchFormView))); } void CMainFrame::OnSecondform() { if (GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView))) return; SwitchToForm(IDD_NEXTFORM); } void CMainFrame::OnUpdateSecondform(CCmdUI* pCmdUI) { pCmdUI->SetCheck(GetActiveView()->IsKindOf(RUNTIME_CLASS(CNextFormView))); }    然后再在该文件开始处添加对两个视图类的引用: #include "SwitchFormDoc.h" #include "SwitchFormView.h" #include "NextFormView.h"    在此须注意:应在两个视类的引用之前添加对文档类的引用,否则会引起编译错误。另外,由于视 类的构造函数在声明时都确省的声明为保护型的,在框架类中无法引用,所以还要将两个视类的类 声明改动如下: class CNextFormView : public CFormView { public: file://将protected 改为public. CNextFormView(); …… }; class CSwitchFormView : public CFormView { public: file://将protected 改为public. CSwitchFormView(); …… };    三、 编译运行    编译运行程序,开始时的窗体上有"这是第一个窗体的字样",菜单也只有"第一个窗体"是被选中的, 当前的活动窗体是第一个窗体;点击菜单"第二个窗体",视图中的窗体上的字样变成了"这是第二 个 窗体",同时选中的菜单也由"第一个窗体"变成了"第二个窗体",实现了通过菜单将窗体进行动态切换。    总结:此程序中关键的是SwitchToView函数,在此函数中,程序搜索所有当前文档的显示窗口来查找与CruntimeClass变量匹配的视图类。如果找到,该窗口被激活。通过与之类似的方法,还可以实现在多文档模式下的单档(文档)多视(视图),通过不同的视图以不同的方式显示来自同一份文档的数据,以更好的满足程序的需要。 立即下载

相关推荐

一、永磁同步电机矢量控制——电机数学模型

本文介绍了永磁同步电机(PMSM)的数学模型构建方法,重点分析了不同坐标系(三相静止、α-β静止、d-q旋转)下的电压方程、磁链表达式及电磁转矩计算方法。通过Clark和Park变换简化非线性耦合系统,推导了表贴式(SPMSM)与内置式(IPMSM)电机的电压方程差异,并给出α-β和d-q坐标系下的转矩公式,强调磁链与电流的正交性对转矩的影响。全文基于理想假设,为后续电机控制算法(如FOC、DTC)提供理论基础。

惊鸿一现 1927

RecalcLayout

 Called by the framework when the standard control bars are toggled on or off or when the frame window is resized.当标准工具栏或状态栏隐藏或者显示,或者窗口调整大小时,框架调用这个方法。 方法原型为: virtual vo

大雁往南飞---专栏 5678

【scratch音乐课】天空之城:音符与节拍、消息与链表

scratch是一个非常小巧的青少年编程工具,自带程序编写语句,积木式语句非常直观、易用,可创作数学、科学、音乐、绘画等方面作品。本文用scratch“演奏”一首大家非常熟悉的《天空之城》,并向大家介绍一些基本乐理知识,以及scratch中消息、链表的使用。

★·°立芯;︶︵︶ 1万+

SetColumnInfo、GetRowInfo、RecalcLayout

CSplitterWnd::SetColumnInfo void SetColumnInfo( int col, int cxIdeal, int cxMin ); 参数: col 指定一个分隔器窗口列。 cxIdeal 指定分隔器窗口列的以像素表示的理想宽度。 cxMin 指定分隔器窗口列以像素表示的最小宽度。 说明: 此成

小米的修行之路 4480

线性模型:AR、MA、ARMA、ARMAX、ARX、ARARMAX、OE、BJ等

线性模型:AR、MA、ARMA、ARMAX、ARX、ARARMAX、OE、BJ等

zephyr_wang的博客 1万+

Zemax热分析实战:多重结构编辑器与操作数优化技巧

本文详细介绍了在Zemax中进行热分析的全流程,重点讲解了如何利用多重结构编辑器模拟不同温度环境,并通过TENP、CRVT、THIC等关键操作数建立热膨胀模型。文章结合双胶合透镜实例,阐述了如何设置热跟随、构建多温度评价函数,并运用锤型优化提升光学系统在全温度范围内的热稳定性与成像质量。

yog99的博客 575

MFC控制条窗口布局原理(上)

 MFC控制条窗口布局原理——by Koote Bi@fudan cse一、框架窗口让我们先从框架窗口开始。当框架窗口改变大小时会收到WM_SIZE消息,CFrameWnd::OnSize负责处理此消息,该函数调用RecalcLayout来重新安置各子窗口,它的主体代码如下:if(GetStyle() & FWS_SNAPTOBARS){CRect rect(0, 0, 32767, 32767)

herb2008的专栏 939

Synares病毒实战:如何从U盘感染中恢复你的Excel和EXE文件(附专杀工具推荐)

本文详细介绍了Synares感染型病毒的典型特征与传播机制,特别是其通过U盘感染Excel和EXE文件的行为。文章提供了一套从应急隔离、诊断到使用专杀工具进行深度清除与文件恢复的完整实战流程,并推荐了有效的安全软件和修复方法,旨在帮助用户最大程度救回重要数据并构建长效安全防护习惯。

weixin_29230649的博客 1812

重新布局窗口RecalcLayout

http://blog.sina.com.cn/s/blog_70d3c6290100ysty.html 当标准工具栏或状态栏隐藏或者显示,或者窗口调整大小时,调用这个方法。 方法原型为: virtual void RecalcLayout( BOOL bNotify = TRUE ); Parameters bNotify Determines whether

mituan1234567的专栏 933

Stata实战:DID平行趋势检验完整操作指南(附reghdfe+coefplot代码)

本文提供了一份使用Stata进行DID平行趋势检验的完整实战指南。文章详细讲解了从数据准备、生成相对时间变量,到利用reghdfe命令构建动态效应模型,以及使用coefplot命令进行结果可视化的全流程操作。核心在于通过检验政策前交互项的显著性,验证处理组与对照组是否满足平行趋势假设,为后续因果推断奠定可靠基础。

weixin_29231725的博客 1380

39-Halcon-- fit_primitives_object_model_3d函数功能(从3D数据中提取几何基元)

Halcon算子fit_primitives_object_model_3d工业应用精要 该算子专为3D几何特征提取设计,支持平面、球体、圆柱等基元拟合。核心优势: 参数化输出:返回几何元素的数学参数(如平面方程、球心半径) 智能控制:通过max_dist、min_size等参数调节拟合精度 工业场景适配:针对薄壁件、孔系等提供专用优化方案 典型应用流程: 数据预处理(点云降噪/采样) 基元类型与参数设置 多阶段拟合(先平面后圆柱) 几何精度验证 误差控制在0.1%-1.2%范围内(视点云密度而定),适用于

weixin_45590420的博客 1161

RecalcLayout 函数学习

1、它是用来将Toolbar、DialogBar等可浮动的东西安排位置、处理和View、Frame之间的位置关系的,例如你直接用m_wndToolbar.ShowWindow(WM_HIDE)隐藏了工具条,那就最好调用这个函数重新安排一下剩下的Bar和View之间的位置2、RecalcLayout是CFrameWnd定义的虚拟函数,边框窗口在必要的时候调用虚拟函数RecalcLayout来重新

1241

Livox激光雷达传感器在Python3中的完整驱动程序:深入剖析OpenPyLivox库的实现和应用

当我们提到激光雷达或激光扫描技术时,Livox激光雷达传感器无疑是业界的佼佼者。尽管Livox提供了基于C++的官方软件和API,但现在,有了OpenPyLivox (OPL) 库,Python开发者们也能够轻松地接入和控制这些高级的激光雷达设备。

qq_38334677的博客 1002

CFrameWnd::RecalcLayout

1.  说明 : virtual void RecalcLayout( BOOL bNotify = TRUE ); Called by the framework when the standard control bars are toggled on or off or when the frame window is resized. ==>  当标准控制条打开或关闭或框架窗口...

u010096608的博客 718

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

CFrameWnd::RecalcLayout 函数详解

CFrameWnd::RecalcLayout 函数详解:Called by the framework when the standard control bars are toggled on or off or when the frame window is resized.当标准工具栏或状态栏隐藏或者显示,或者窗口调整大小时,框架调用这个方法。方法原型为: virtual v

1121

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【交互】MFC窗口位置分析

一、单文档子窗口          OnSize()中通过发送WM_SIZEPARENT消息给CControlBar,然后由派生于ControlBar的子窗口切去自己占有的矩形区,并用::EnderWindows CDocTemplate::InitialUpdateFrame() ActivateFrame(1)//里面调用了一个ShowWindow,显示所有窗口,发送WM_SIZE消息

此博客不更新很多年了,博客作废............ 2433

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

MFC教程(13)-- MFC工具条和状态栏(1)

 MFC教程(13)-- MFC工具条和状态栏(1) 3G双线全能空间1元认购 开网店-找友创互联 http://tech.ddvip.com   2007年03月18日    社区交流 关键字:Fibonacci InfoQueue SYGUI 模板元编

skyremember的专栏 2387

BCG MainFrame 最大最小化时不刷新

void CMainFrame::OnSize(UINT nType, int cx, int cy){ CBCGPFrameWnd::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 AdjustDockingLayout();} 或者用RecalcLayout()

carl2380的专栏 1230

MFC 框架、文档、视图操作常用函数用法简析

MFC 框架、文档、视图操作常用函数用法简析1.     跟窗口刷新有关的几个MFC函数//重绘窗口1)               RecalcLayout();       /*RecalcLayout()--       The default implementation of this member function        calls the CWnd m

生命因你而精彩!明天更美好! 7177

3.29--如何使一个程序清单视图初始显示时的尺寸恰好为所关联的对话框资源的大小?

要使一个 程序清单视图 初始显示时的尺寸恰好为所关联的对话框资源的大小,修改 程序清单视图 的OnInitialUpdate() 函数如下:void CDrawFormView::OnInitialUpdate() {      // 1 - 使基类进行默认的处理      CFormView::OnInitialUpdate();       if( GetDocument()->m_b

1032

CSplitterWnd修改分割条位置

换一种思路,只要修改了分割窗口的大小,相应的分割条位置就会变化 使用CSplitterWnd.SetRowInfo();修改行信息,可设置分割窗口高度 使用CSplitterWnd.SetColumnInfo();修改列信息,可设置分割窗口宽度 最后用CSplitterWnd.RecalcLayout();重新显示。 放在onsize函数中,可以根据窗口的大小,自动调整各个分割窗口的大小。 ...

sjk_beijing的博客 396

如何隐藏RibbonBar的QAT QuickAccessToolBar

方案1: .h文件 class CMyRibbonBar :    public CMFCRibbonBar {     DECLARE_DYNAMIC(CMyRibbonBar) protected:     DECLARE_MESSAGE_MAP() virtual BOOL OnShowRibbonContextMenu(CWnd* pWnd, int x, int y, 

路楷的专栏 2119

RepositionBars的用法和参数的意义

MFC窗口位置管理详细分析及实例在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口)。上边是工具栏,中间是视图窗口,下边是状态栏。三个窗口在框架的客户区里和平共处,互不重叠。主框架窗口的尺寸改变了,别的子窗口都能及时调整自己的尺寸以便保持相互位置关系不变,例如状态条窗口总能保持在主框架客户区底部,并且其宽度总能和主框架客户区宽度一致。工具栏窗口总能停靠在主框

Jiao2_vc的专栏 1290

关于用CSplitterWnd分割View的一点总结

1.在要分割的View中添加OnCreate消息响应函数 ;2.分割函数:int CUserManagerSplitterView::OnCreate(LPCREATESTRUCT lpCreateStruct) ...{    if (CView::OnCreate(lpCreateStruct) == -1)        return -1;        if(!m_wndUser

rzhangww的专栏 624

BCGPro Ribbon区域隐藏打开操作

BCGPro Ribbon区域隐藏打开操作

u011269801的专栏 244
上一篇: 孙鑫VC学习笔记:第二十讲 (二) ado数据库编程
下一篇: MFC 中获取各种类指针的方法
Savitch
博客等级 码龄16年 84粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值