怎样得到一个MDI的除去ToolBar, ControlBar 后的矩形大小

z_j 2001-07-18 09:16:38
如下图:
________________________________________
| ToolBar |
|______________________________________|
| | |
|DockBar | |
| | |
| | Rect |
| | |
| | |
|________|_____________________________|

用 GetClientRect 得到是包括 toolbar ,Dockbar在内的区域大小,如何得到上图中 Rect 的大小
...全文
169 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nustchen 2001-07-19
  • 打赏
  • 举报
回复
非常easy,调用MFC函数
RepositionBars( 0, 0xffff, 0, reposQuery, &rtRest );
参数reposQuery就代码查询区域大小,rtRest就是剩余区域的大小
简单吧。
tiongkohlang 2001-07-18
  • 打赏
  • 举报
回复
即使不是mdi程序,由于涉及到对客户区的操作,上述讨论应该也是有益的。
tiongkohlang 2001-07-18
  • 打赏
  • 举报
回复
ahphone说的不行,人家问的是除去客户区内各种窗口后剩下的客户区的大小怎么解决。
为什么会有这种问题呢?因为如果亲身不依赖mfc编一些程序就会发现,无论是sdi程序还是mdi程序,都涉及到调整客户窗口的位置的问题。对于mdi程序,因为DefFrameProc仅仅会根据客户区的大小来调整mdiclient,所以一但你的client rectangle里边还有toolbar之类的控件或者窗口,你的程序的UI就要完蛋。所以必须调整一下这个mdiclient。
我建议两种方法。
1,如果你能够精确的确定所需要排除的窗口的位置,那么你可以自己编一个函数,运用GetClientRect和GetWIndowRect所得到的矩形进行一些计算,就可以得到所需要的矩形。然后把mdiclient移动到相应的位置。
我给你举一个例子。
LRESULT
MDIFrame_AdjustClientPosition
(
LPMDIFRAME pmf
)
{
UINT x,y,wWidth,wHeight;
RECT rcToolbar,rcStatusbar,rcClient;
if (IsWindowVisible(pmf->hwndToolbar))
GetWindowRect(pmf->hwndToolbar,&rcToolbar);
else
SetRectEmpty(&rcToolbar);
if (IsWindowVisible(pmf->hwndStatusbar))
GetWindowRect(pmf->hwndStatusbar,&rcStatusbar);
else
SetRectEmpty(&rcStatusbar);
GetClientRect(pmf->hwnd,&rcClient);
x=rcClient.left;
y=rcClient.top+(rcToolbar.bottom-rcToolbar.top);
wWidth=rcClient.right-rcClient.left;
wHeight=rcClient.bottom-rcClient.top
-(rcToolbar.bottom-rcToolbar.top)
-(rcStatusbar.bottom-rcStatusbar.top);
MoveWindow(pmf->hwndClient,x,y,wWidth,wHeight,TRUE);
return 0;
}
2,如果你大量的使用各种bars那么又一个GetEffectiveClientRect函数。这是微软公司在common control api 里边提供的。从名称上看,就可以意识到这个函数和以上所遇到的问题有关,可见微软意识到了上述的程序设计问题。这个函数的原型是
void GetEffectiveClientRect(
HWND hWnd,
LPRECT lprc,
LPINT lpInfo
);
msdn的解释是:
Parameters
hWnd
Handle to the window that has the client area to check.
lprc
Address of a RECT structure that receives the dimensions of the rectangle.
lpInfo
Address of an array of integers that identify controls in the client area. Each control requires a pair of consecutive elements. The first element of the pair must be nonzero and the second element of the pair must be the control identifier. The last element pair in the array must be zero to identify the end of the array.
我没有用过这个函数,因此就把微软的原文呈现在整个地方。
另外为了解决一些其他的UI程序设计中的问题,还有一个相关的函数:
BOOL ShowHideMenuCtl(
HWND hWnd,
UINT uFlags,
LPINT lpInfo
);
这个函数是用来解决用菜单的标志来标示control是否可见的问题的。

不过令我不解的是,mfc已经解决了上述问题,不知道为什么z_j还会问。
ahphone 2001-07-18
  • 打赏
  • 举报
回复
就是窗口的矩形减掉标题栏的矩形吧
GetWindowRect()
标题栏高度:GetSystemMetrics(SM_CYCAPTION)
呵呵!我也别说了,要是不嫌繁,这个GetSystemMetrics多用几把
源码直接下载地址: https://pan.quark.cn/s/be6e03a195a4 该资源为"108大型通信技术有限公司"提供的网站源代码,其功能完整性和经过测试的状态已得到确认。这段源代码可作为极具价值的参考资料,不仅适用于通信技术在网站开发中的学习应用,也适合作为毕业设计项目的基础。以下列出了源代码中可能涵盖的关键知识点及详尽说明: 1. **前端框架与库**:网站极有可能运用了主流的前端框架,例如Bootstrap或AngularJS,或者自行设计的HTML、CSS和JavaScript。这些框架提供了一套完整的用户界面组件,有效简化了页面的布局和交互设计过程。 2. **响应式设计**:鉴于该网站属于大型通信技术公司,源代码大概率集成了响应式设计,确保网站在不同设备(包括手机、平板及桌面电脑)上均能提供优质的用户体验。 3. **通信协议与API**:源代码可能涉及HTTP/HTTPS协议,用于客户端与服务器之间的数据传输。若网站具备实时通信功能,则可能采用了WebSocket或其他实时通信协议。此外,可能还包括与其他服务或系统的API接口,例如RESTful API。 4. **后端技术**:网站的后端可能选用了Java(Spring Boot)、Python(Django或Flask)、Node.js(Express)等服务器端框架。后端主要负责处理业务逻辑、数据库操作和用户认证等任务。 5. **数据库管理**:源代码中可能包含SQL查询,表明使用了关系型数据库(如MySQL、PostgreSQL),或者NoSQL数据库(如MongoDB)。数据库设计对于存储和检索大量通信数据具有关键作用。 6. **安全性**:源代码应包含多项安全措施,如C...
内容概要:本文系统阐述了基于Wasserstein生成对抗网络(W-GAN)的光伏出力场景生成方法,旨在通过深度学习技术精准刻画光伏发电功率的时间序列不确定性。研究构建了完整的W-GAN模型架构,详细介绍了其在网络结构设计、损失函数优化(引入Wasserstein距离提升训练稳定性)及训练流程上的关键技术细节,并提供了完整的Python代码实现。该方法能够生成高保真、多样化的光伏功率出力场景,有效克服传统方法在捕捉复杂概率分布和时序相关性方面的局限性,为处理新能源出力不确定性问题提供了先进的数据驱动解决方案。; 适合人群:具备Python编程能力及机器学习基础知识,专注于新能源发电预测、电力系统规划、电力市场分析、综合能源系统优化等领域研究的高校研究生、科研机构研究人员及电力企业技术人员。; 使用场景及目标:①掌握W-GAN在新能源时序数据生成中的高级应用技巧;②构建高精度的光伏出力不确定性模型,生成用于鲁棒优化与随机规划的多场景集;③支撑高比例可再生能源接入下的电力系统可靠性评估、储能配置、经济调度及风险管控等关键决策; 阅读建议:建议读者务必结合所提供的Python代码进行动手实践,深入理解模型的超参数设置、训练动态监控与收敛性判断方法,并尝试将该方法与文中提及的DDPM、条件GAN等其他前沿生成模型进行对比实验,以深化对不同生成模型特性的认识,拓展解决实际科研问题的技术路径。
内容概要:本文详细阐述了工业母机技术领域中“高级结构设计工程师”这一岗位的全方位任职要求与职业发展路径,涵盖职位对标、目标企业、学历与证书要求、年龄范围、管理半径、晋升关键点、必备工作经验年限以及薪资待遇区间。重点突出该岗位对高端数控机床核心结构(如床身、主轴箱、导轨等)设计能力的要求,强调有限元分析、精度控制、热变形补偿、振动抑制等核心技术能力,并明确指出需具备项目主导经验、团队管理能力和跨部门协作经验。同时,根据不同企业类型和发展阶段,给出了清晰的年薪划分标准,体现了市场对该岗位的技术深度与综合能力的高度认可。; 适合人群:具备5年以上工业母机或高端机床结构设计经验,致力于向高级工程师、技术专家或管理岗位发展的结构设计从业者;或希望转型进入高端装备制造业的精密机械研发人员。; 使用场景及目标:①用于求职者精准定位职业发展方向,评估自身与高级岗位之间的能力差距;②辅助企业制定人才招聘标准与薪酬体系;③指导技术人员规划技能提升路径,聚焦核心技术积累与项目经验沉淀。; 阅读建议:建议结合个人职业发展阶段对照文中各项指标进行自我诊断,重点关注“晋升关键点”与“必备年限”部分,有针对性地补齐技术短板、积累主导项目经验,并注重专利成果与团队管理能力的培养,以全面提升竞争力。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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