WM_NCCALCSIZE,自定义客户端区域和滚动条

时间:2013-07-31 17:27:20

标签: winapi mfc scintilla

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

Desired client area

我尝试覆盖Scintilla窗口的WM_NCCALCSIZE消息,并从客户端矩形的右侧减去偏移量。这是代码:

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

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

Scrollbar offset from client offset

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

1 个答案:

答案 0 :(得分:0)

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