wxStyledTextCtrl-自动压缩的大小



我只是想知道是否可以找到wxStyledTextCtrl显示的自动完成控件的大小(以像素为单位(。

我的目标是在进行选择时显示与条目相关联的帮助窗口。因此,我需要自动完成控件的位置和宽度。似乎可以从m_STC->AutoCompPosStart()中找到位置,但似乎没有办法找到宽度。我正在使用以下代码:

auto StartPos = m_STC->ToPhys(m_STC->PointFromPosition(m_STC->AutoCompPosStart()));

int MaxChars = m_STC->AutoCompGetMaxWidth(); //returns 0 unless set to a fixed value
int w, h;
m_STC->GetTextExtent(wxString("A", MaxChars), &w, &h);
return wxPoint(StartPos.x + w, StartPos.y);

我使用的是Windows和wxWidgets 3.2。

由于自动编译窗口完全由Scintilla管理,因此无法从样式文本控件中获取此信息。不幸的是,Scintilla没有提供任何方法来获取这些信息。

作为破解,弹出窗口目前被实现为样式文本控件的子窗口。所以你可以这样做:

const wxWindowList& childred = m_stc->GetChildren();
for ( auto it = childred.begin() ; it != childred.end() ; ++it )
{
// We're assuming the styled text control has at most 1 child - 
// namely the autocomp popup. It might be better to check that
// the window found is in fact the auto comp popup somehow.
// win->GetPosition() will return screen coordinates, so to get client
// coordinates, ScreenToClient must be called.
wxPoint psn = m_stc->ScreenToClient(win->GetPosition());
wxSize sz = win->GetSize();
// Do something with size and position here.
}

然而,这并不能保证总是有效的。如果将来自动comp弹出实现更改为使用顶级窗口而不是控件的子窗口,则此方法将失败。

相关内容

  • 没有找到相关文章

最新更新