【问题标题】:WM_NCCALCSIZE, custom client area, and scroll barsWM_NCCALCSIZE、自定义客户区和滚动条
【发布时间】:2013-08-01 08:53:15
【问题描述】:

我有一个嵌入了 Scintilla 文本编辑控件的 MFC 应用程序。我想自定义 Scintilla 控件以在垂直滚动条旁边显示一些自定义控件。本质上,我想在下面的橙色区域渲染一些控件,其中绿色区域代表滚动条:

我尝试覆盖 Scintilla 窗口的 WM_NCCALCSIZE 消息并从客户矩形的右侧减去一个偏移量。代码如下:

void CScintillaCtrl::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
{
    CWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
    lpncsp->rgrc[0].right -= 100;
}

但是,这会导致垂直和水平滚动条重新定位以适应较小的客户端宽度,如下所示:

我不确定这种行为是由 Scintilla 还是 Windows 引起的。有没有办法可以调整客户区并保留滚动条的位置?

【问题讨论】:

  • “我不确定这种行为是由 Scintilla 还是 Windows 引起的” - Windows:files.rsdn.ru/42164/nccalcsize.png
  • 您可以在左侧添加自定义控件,从而省去很多麻烦;-)。
  • 哈哈,我希望就这么简单;)
  • WM_NCCALSIZE 的行为是正确的。由于消息的意图,它将在您的控件周围添加一个边框,而不是在它内部!

标签: winapi mfc scintilla


【解决方案1】:

我找到了 Scintilla 特定的解决方案。我可以使用SCI_SETMARGINRIGHT 命令在客户区右侧添加一个边距,然后在其中渲染我的控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-13
    • 1970-01-01
    • 2014-05-02
    相关资源
    最近更新 更多