如何在带有对话框栏的 CFrameWnd 中获取可绘制区域?

Posted

技术标签:

【中文标题】如何在带有对话框栏的 CFrameWnd 中获取可绘制区域?【英文标题】:How do I get the paintable area in a CFrameWnd with dialog bars? 【发布时间】:2010-07-21 19:48:26 【问题描述】:

我有一个带有对话框栏的 CFrameWnd,我想确定可绘制区域(不包括对话框栏使用的空间),这样我就可以在其中绘制而不会被对话框栏重叠。我怎样才能做到这一点? GetClientRect() 似乎也覆盖了客户矩形区域,我在文档中看不到任何其他明显的候选者。

【问题讨论】:

【参考方案1】:

我很确定Cwnd::RepositionBars 方法应该提供您需要的信息。下面的代码对你有用吗?

CRect rcClient;
pFrameWnd->RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0, CWnd::reposQuery, &rcClient);

【讨论】:

这看起来像我可能需要的 - 不过要到明天才能测试。是否有窗口消息或回调可用于确定何时移动工具栏,以便我可以重新计算客户端矩形,而不是在每个 WM_PAINT 上调用它?【参考方案2】:

我在使用 CDockablePane 时遇到了类似的问题,我用

解决了这个问题
CRect rc;
GetDockingManager()->GetClientAreaBounds(rc);

但我也遇到了无法找到消息或回调以知道何时触发的问题。

【讨论】:

以上是关于如何在带有对话框栏的 CFrameWnd 中获取可绘制区域?的主要内容,如果未能解决你的问题,请参考以下文章

非客户区

这个控件的名称是啥?两个带有方向栏的可滚动列表

Angular/Bootstrap - 带有可切换侧边栏的导航栏

jquery UI 对话框:如何在没有标题栏的情况下进行初始化?

如何在带有导航栏的模态视图中更改 iOS 7 中的 UIStatusBarStyle?

如何在带有深色主题的android上更改chrome中状态栏的颜色?