我正在尝试编写一个函数,如果当前具有焦点的窗口完全显示在我的CScrollView
的客户端矩形中,但是我正在努力弄清楚我做错了什么。这就是我到目前为止所做的:
CWnd * pWnd = pView->GetFocus();
if(pWnd)
{
CRect winRect;
pWnd->GetWindowRect(&winRect);
pView->ScreenToClient(&winRect); //pView is a pointer the CScrollView
CRect viewRect;
pView->GetClientRect(&viewRect);
CPoint currentScrollPoint = pView->GetScrollPosition();
viewRect.OffsetRect(currentScrollPoint);
if(!(viewRect.PtInRect(winRect.BottomRight()) && viewRect.PtInRect(winRect.TopLeft())))
{
//Not shown fully
}
}
任何人都可以看到我在这里做错了或建议更好的方法吗?
答案 0 :(得分:2)
对上述问题的评论澄清了问题的实际意图:
...when I tab to one that is not shown by the current client rect I want to scroll
to display that `CEdit`...
我发现有两篇文章在MSDN上搜索CFormView scroll tab key
:
OnCtlColor()
检查子窗口是否具有焦点且不在视图中;它使用ScrollToPosition()
ScrollToPosition()
在Windows CE中不起作用(这两篇文章都很老了!),检查WM_KEYUP
中的标签键的PreTranslateMessage()
和使用它自己的ScrollToPos()
函数将控件滚动到视图中(本文适用于Windows CE,您需要将wce_GetNextWindow
替换为GetNextWindow