2

我正在尝试编写一个函数,如果当前具有焦点的窗口完全显示在我的客户端矩形中,则该函数将起作用,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
    }
}

谁能看到我在这里做错了什么或提出更好的方法?

4

1 回答 1

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_KEYUPtab 键PreTranslateMessage()并使用它自己的ScrollToPos()功能将控件滚动到视图中(这篇文章是针对 Windows CE 的,你会需要替换wce_GetNextWindowGetNextWindow
于 2013-09-11T12:22:59.510 回答