mfc单文档程序嵌入对话框尺寸确定问题(vs10)

wojiayutou 2015-03-02 10:22:29
程序基于VS10提供的单文档demo生成的。
左侧建立outlook导航栏,下侧建立output窗口。

样式如图所示。
现在想在右上角空白处添加一个Dialog对话框,具体思路如下:
建立对话框(类C**box),继承于CDialogEx。
生成类ControlPanel,继承于CDockablePane,添加:
C**box m_dlg;
相应添加
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnDestroy( );三个函数。

后续于CMainFrame::OnCreate函数添加代码如下:
m_wndPanel.Create(_T("Rtppp"),this,CRect(0,0,300,300),TRUE,666,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI /*| C BRS_ALIGN_TOP *//*| CBRS_ALIGN_RIGHT*/);
m_wndPanel.EnableDocking(CBRS_ALIGN_RIGHT);
DockPane(&m_wndPanel);
其中ControlPanel m_wndPanel;

CMainFrame::OnCreate函数中关于outlookbar和output窗口代码如下所示:
// 导航窗格将创建在左侧,因此将暂时禁用左侧的停靠:
EnableDocking(CBRS_ALIGN_TOP | CBRS_ALIGN_BOTTOM | CBRS_ALIGN_RIGHT);

// 创建并设置“Outlook”导航栏:
if (!CreateOutlookBar(m_wndNavigationBar, ID_VIEW_NAVIGATION, m_wndOutlookPane, m_wndTree, m_wndCalendar, 250))
{
TRACE0("未能创建导航窗格\n");
return -1; // 未能创建
}

// 已创建 Outlook 栏,应允许在左侧停靠。
EnableDocking(CBRS_ALIGN_LEFT);
EnableAutoHidePanes(CBRS_ALIGN_RIGHT);

// 创建停靠窗口
if (!CreateDockingWindows())
{
TRACE0("未能创建停靠窗口\n");
return -1;
}

m_wndOutput.EnableDocking(CBRS_ALIGN_ANY);
DockPane(&m_wndOutput);

程序运行效果如下所示:


其中插入的对话框未能完全填充满界面右上角空间。
请问对话框应该怎样设置,才能根据outlookbar和output窗口的大小,确定剩余空间的大小,以此确定对话框的尺寸?

谢谢各位,望不吝指教!!!
...全文
655 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
JoeyKo 2015-07-12
  • 打赏
  • 举报
回复
请问你左侧Outlook导航栏怎么设置的?
脚本之家 2015-06-25
  • 打赏
  • 举报
回复
我也遇到类似问题。
qq3011642 2015-05-02
  • 打赏
  • 举报
回复
你好,我看到你在csdn上发的关于dialog嵌套的帖子,我想和你交流一下这个个问题。因为我现在也要用到。想加一下你的QQ,可以么。
lougd 2015-03-03
  • 打赏
  • 举报
回复
引用 8 楼 wojiayutou 的回复:
[quote=引用 6 楼 u011391040 的回复:] [quote=引用 5 楼 wojiayutou 的回复:] [quote=引用 3 楼 LittleCommit 的回复:] 理论上使用MoveWindow和SetWindowPos函数都可以实现,具体用法,你可以百度一下或查看msdn
我已经在cdockpanel中设置了对话框随着dockpanel大小变化。 但是现在的问题是cdockpanel怎么获取剩余空间的大小?[/quote] GetWindowRect:获取窗体大小,带边框 GetClientRect:获取客户区大小,不带边框[/quote] 您好,我根据您说的添加了相应代码,如下所示: CRect temp; /*GetWindowRect(temp);*/ this->GetClientRect(&temp); m_wndPanel.Create(_T("Rtppp"),this,temp,TRUE,666, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_TOP | CBRS_FLOAT_MULTI); m_wndPanel.EnableDocking(CBRS_ALIGN_RIGHT); DockPane(&m_wndPanel); 但是运行出来的结果仍然是未能全部填充,请问问题可能出在哪里? [/quote] 看一下获取的rect对吗?在创建窗口的OnInitDialog里用MoveWindow设置下试试。
wojiayutou 2015-03-03
  • 打赏
  • 举报
回复
引用 6 楼 u011391040 的回复:
[quote=引用 5 楼 wojiayutou 的回复:]
[quote=引用 3 楼 LittleCommit 的回复:]
理论上使用MoveWindow和SetWindowPos函数都可以实现,具体用法,你可以百度一下或查看msdn


我已经在cdockpanel中设置了对话框随着dockpanel大小变化。
但是现在的问题是cdockpanel怎么获取剩余空间的大小?[/quote]
GetWindowRect:获取窗体大小,带边框
GetClientRect:获取客户区大小,不带边框[/quote]


您好,我根据您说的添加了相应代码,如下所示:
CRect temp;
/*GetWindowRect(temp);*/
this->GetClientRect(&temp);

m_wndPanel.Create(_T("Rtppp"),this,temp,TRUE,666,
WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CBRS_TOP | CBRS_FLOAT_MULTI);
m_wndPanel.EnableDocking(CBRS_ALIGN_RIGHT);
DockPane(&m_wndPanel);

但是运行出来的结果仍然是未能全部填充,请问问题可能出在哪里?
wojiayutou 2015-03-03
  • 打赏
  • 举报
回复
引用 4 楼 sunnyloves 的回复:
空白处完全填对话框吗 那里是view的区域 直接在CxxView里动态创建你的对话框元素就好了
请问能不能给一个示范,对这方面不太清楚。 另外,使用dockpanel不可以吗?不一定局限于对话框,只要将中间空白区域填充完全就可以了
lougd 2015-03-03
  • 打赏
  • 举报
回复
引用 5 楼 wojiayutou 的回复:
[quote=引用 3 楼 LittleCommit 的回复:] 理论上使用MoveWindow和SetWindowPos函数都可以实现,具体用法,你可以百度一下或查看msdn
我已经在cdockpanel中设置了对话框随着dockpanel大小变化。 但是现在的问题是cdockpanel怎么获取剩余空间的大小?[/quote] GetWindowRect:获取窗体大小,带边框 GetClientRect:获取客户区大小,不带边框
wojiayutou 2015-03-03
  • 打赏
  • 举报
回复
引用 3 楼 LittleCommit 的回复:
理论上使用MoveWindow和SetWindowPos函数都可以实现,具体用法,你可以百度一下或查看msdn
我已经在cdockpanel中设置了对话框随着dockpanel大小变化。 但是现在的问题是cdockpanel怎么获取剩余空间的大小?
洗洗睡去 2015-03-03
  • 打赏
  • 举报
回复
空白处完全填对话框吗 那里是view的区域 直接在CxxView里动态创建你的对话框元素就好了
LittleCommit 2015-03-03
  • 打赏
  • 举报
回复
理论上使用MoveWindow和SetWindowPos函数都可以实现,具体用法,你可以百度一下或查看msdn
LittleCommit 2015-03-03
  • 打赏
  • 举报
回复
如果你的对话框是在ControlPanel类里创建的话,那么你需要在ControlPanel类的Onsize函数里重新设置对话框的大小为ControlPanel的大小(即对话框充满整个窗口),这样当ControlPanel的大小改变时,对话框的大小也会随之改变的。
wojiayutou 2015-03-03
  • 打赏
  • 举报
回复
求各位给与帮助
洗洗睡去 2015-03-03
  • 打赏
  • 举报
回复
引用 10 楼 wojiayutou 的回复:
[quote=引用 4 楼 sunnyloves 的回复:] 空白处完全填对话框吗 那里是view的区域 直接在CxxView里动态创建你的对话框元素就好了
谢谢,按照您的方法已经设置好了,感谢您的帮助![/quote] 还有个办法是创建项目的时候 不从CView派生 而从CFormview派生
wojiayutou 2015-03-03
  • 打赏
  • 举报
回复
引用 4 楼 sunnyloves 的回复:
空白处完全填对话框吗 那里是view的区域 直接在CxxView里动态创建你的对话框元素就好了
谢谢,按照您的方法已经设置好了,感谢您的帮助!
内容概要:本文围绕“阶梯碳下考虑P2G-CCS与供需灵活响应的IES优化调度”展开,基于Matlab平台构建综合能源系统(IES)在阶梯式碳交易机制下的优化调度模型。研究深度融合电制气(P2G)与碳捕集、利用与封存(CCS)技术,结合需求侧灵活响应机制,旨在提升系统的低碳运行能力与经济性。通过建立多能流耦合的优化模型,协调电力、天然气、热力等多种能源形式的协同调度,有效降低系统碳排放强度,并借助YALIMIP工具包调用求解器进行高效求解。文档提供了完整的代码实现、模型构建流程与结果分析方法,涵盖从问题建模到仿真实现的全过程,具备较强的可复现性与科研参考价值。; 适合人群:具备电力系统、能源系统或优化建模相关背景的研究生、高校教师及工程技术人员,尤其适合从事综合能源系统、碳减排策略、P2G与CCS技术集成研究的专业人员,需熟练掌握Matlab编程与基本的数学规划知识。; 使用场景及目标:①用于研究阶梯式碳交易政策下综合能源系统的低碳经济调度策略;②支撑P2G-CCS技术与需求响应机制在IES中的仿真集成与性能评估;③作为撰写高水平学术论文(如EI/SCI收录)的技术基础与复现资源,推动碳中和背景下能源系统优化方向的创新研究。; 阅读建议:建议结合百度网盘提供的完整代码与资料包,按照模块逐步调试程序,重点理解目标函数的设计逻辑、碳交易成本的建模方式、约束条件的数学表达及求解器的配置方法,同时关注多能耦合设备的建模细节,配合公众号“荔枝科研社”获取持续的技术支持与案例拓展。
内容概要:本文系统研究了基于卷积神经网络(CNN)与支持向量机(SVM)融合的CNN-SVM混合模型在数据分类预测中的应用,尤其聚焦于工业故障识别领域。通过Matlab平台实现,该方法首先利用CNN强大的多层次特征提取能力对原始输入数据进行深度特征学习,自动捕获关键局部模式与空间结构信息,随后将提取的高层特征作为输入传递至SVM分类器,借助SVM在高维空间中小样本条件下卓越的分类性能与泛化能力完成最终判别任务。文中详尽阐述了模型的整体架构设计、网络参数配置、训练优化流程及特征迁移机制,充分结合了深度学习在特征表达上的优势与传统机器学习在分类决策上的稳健性。实验部分通过实际故障数据集验证了该混合模型相较于一CNN或SVM模型在分类准确率、鲁棒性和抗过拟合能力方面的显著提升,证明了其在复杂故障诊断任务中的有效性与先进性; 适合人群:具备一定机器学习与深度学习理论基础,熟悉Matlab编程环境,从事故障诊断、模式识别、智能制造、电力系统监控或工业数据分析等相关领域的研究生、科研人员及工程技术开发者; 使用场景及目标:① 应用于旋转机械、电力设备、航空航天等领域的多类别故障识别与状态监测;② 掌握深度特征提取与传统分类器融合的技术路径,提升小样本、高噪声环境下数据分类的精度与可靠性;③ 为撰写高水平学术论文、开展科研项目或工程实践提供可复现的算法框架与完整代码支持; 阅读建议:读者应深入理解CNN与SVM的协同工作机制,重点分析特征提取层与分类层之间的接口设计,建议动手运行并调试所提供的Matlab代码,尝试在不同数据集上进行迁移实验与参数调优,以全面掌握该混合模型的应用技巧与优化策略。

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧