c++ - 滚动后 MFC 控件消失

标签 c++ visual-c++ mfc windows-mobile windows-ce

我正在 WinCE 中开发基于对话框的 MFC 应用程序。 我在对话框中创建了几个控件并向下滚动。 当我再次向上滚动时,第一个屏幕中的控件消失了。

控件在 OnInitDialog() 中创建,如下面的坐标 (50,10)

test->Create(_T("Title"), WS_CHILD|WS_VISIBLE, CRect(50,10,200,40), this, ID_TITLE);

我在 OnVScroll() 中进行的滚动处理如下所示

 switch(nSBCode)
 {
  case SB_LINEDOWN:
  {
   if(nPos < max)
   {
    ScrollWindowEx(0, SCROLLDOWN_LINE_STEPSIZE, CRect(0,0, rect.right - 25, rect.bottom), NULL, NULL, NULL, SW_SCROLLCHILDREN | SW_INVALIDATE); 
    pScrollBar->SetScrollPos(nPos - SCROLLDOWN_LINE_STEPSIZE); //nPos+10
   }
   break;
  }
  case SB_LINEUP:
  {
   if(nPos > min)
   {
    ScrollWindowEx(0, SCROLLUP_LINE_STEPSIZE, CRect(0,0, rect.right - 25, rect.bottom), NULL, NULL, NULL, SW_SCROLLCHILDREN | SW_INVALIDATE); 
    pScrollBar->SetScrollPos(nPos - SCROLLUP_LINE_STEPSIZE); //Ex: nPos-10
   }
   break;
  }

 default:
  printf("Notimplemented");
  break;
 }

我正在处理向下滚动和向上滚动。 向下滚动时,会显示对话框中的所有控件。 但是在向上滚动时,顶部的控件消失了。

这是怎么回事? 我是否应该在每次滚动时实现 OnPaint() 方法来绘制控件? 如果是,怎么办?

最佳答案

我有以下代码可以正常工作。希望对您有所帮助。

LRESULT CMyWindow::OnVScroll( UINT code, UINT position )
{
    SCROLLINFO info = { sizeof( SCROLLINFO ), SIF_ALL };
    GetScrollInfo( m_wnd, SB_VERT, &info );
    int previous_pos = info.nPos;
    switch( code )
    {
    case SB_TOP:
        info.nPos = 0;
        break;
    case SB_BOTTOM:
        info.nPos = info.nMax - info.nPage;
        break;
    case SB_LINEDOWN:
        info.nPos = min( info.nPos + 1, info.nMax - (int)info.nPage );
        break;
    case SB_LINEUP:
        info.nPos = max( info.nPos - 1, info.nMin );
        break;
    case SB_PAGEDOWN:
        info.nPos = min( info.nPos + (int)info.nPage, info.nMax - (int)info.nPage );
        break;
    case SB_PAGEUP:
        info.nPos = max( info.nPos - (int)info.nPage, info.nMin );
        break;
    case SB_THUMBTRACK:
    case SB_THUMBPOSITION:
        info.nPos = position;
        break;
    }
    int offset = previous_pos - info.nPos;
    if( offset != 0 )
    {
        ScrollWindowEx( m_wnd, 0, offset, NULL, NULL, NULL, NULL, SW_SCROLLCHILDREN | SW_INVALIDATE | SW_ERASE );
        SetScrollPos( m_wnd, SB_VERT, info.nPos, FALSE );
    }
    return 0L;
}

关于c++ - 滚动后 MFC 控件消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3750911/

相关文章:

c++ - SystemC 错误,使用 Visual C++ 2008

c++ - 什么时候应该明确地赋予 noexcept 属性?

image - 如何在C++中加载24位Tiff图像

c++ - GetProfileInt() 不返回默认值

c++ - 以逻辑单位表示的 CDC 区域大小?

c++ - 有什么方法可以检索 CEditBox 中文本的文本高度(以像素为单位)?

c++ - 使用基类的派生类值

c++(不> = 11),初始化映射中的嵌套对

c++ - 如何创建std::ofstream的 vector 并将流写入不同的文本文件

c++ - 使编译器不自动刷新缓冲区