はじめまして。鈴木と申します。

現在VC6(SP6)でCScrollViewを用いたアプリを作成しています。

OnDraw()にて、クライアントウィンドウサイズのコンパチブルビット
マップに描画を行い、CDC::BitBlt()でViewに転送する方法を用いて
いるのですが、転送先のY座標が1億3千万を少し超えた辺りで、
転送が行われなくなります。BitBlt()はTRUEを返しているのですが。
正しく転送を行うにはどうすれば良いのでしょうか?
BitBlt()を使わず、直接描画を行った場合は問題無いようです。

開発環境は WINDOWS XP(SP2) VC6(SP6) です。
以下ソースです。問題確認用のサンプルなのでチラツキ等は無視
してください。

void CTestView::OnInitialUpdate()
{
  CScrollView::OnInitialUpdate();
  CSize sizeTotal;
  sizeTotal.cx = sizeTotal.cy = 100;
  sizeTotal.cy = INT_MAX; // ※ Viewの縦幅をINT_MAXに
  SetScrollSizes(MM_TEXT, sizeTotal);
}

void CTestView::OnDraw(CDC* pDC)
{
  CRect rect; GetClientRect(rect); // client window size
  CPoint pos = GetScrollPosition(); // scroll position
  CString text; text.Format("%d : %d", pos.x, pos.y);

  CDC memDC;
  if(memDC.CreateCompatibleDC(pDC))
  {
    CBitmap  bitmap;
    int width = rect.Width() ;
    int height = rect.Height() ;
    if( bitmap.CreateCompatibleBitmap( pDC, width, height) )
    {
      CBitmap *backup = (CBitmap *)memDC.SelectObject( bitmap );
      memDC.DrawText( "転送" + text, rect,
                 DT_CENTER | DT_VCENTER | DT_SINGLELINE );
      // 問題の転送
      pDC->BitBlt(pos.x, pos.y, width, height, &memDC, 0, 0, SRCCOPY);
      memDC.SelectObject( backup );
    }
  }
  // 通常描画(こっちは問題なし)
  pDC->DrawText( "直接"+text, pos+rect,
                          DT_CENTER | DT_BOTTOM | DT_SINGLELINE);
}

BOOL CTestView::OnScroll(UINT nScrollCode, UINT nPos, BOOL bDoScroll)
{ // CScrollView Bug Fix
  SCROLLINFO si;
  si.cbSize = sizeof(SCROLLINFO);
  si.fMask = SIF_TRACKPOS;
  if( LOBYTE(nScrollCode) == SB_THUMBTRACK )
  {
    GetScrollInfo( SB_HORZ, &si );
    nPos = si.nTrackPos;
  }
  if( HIBYTE(nScrollCode) == SB_THUMBTRACK )
  {
    GetScrollInfo( SB_VERT, &si );
    nPos = si.nTrackPos;
  }
  return CScrollView::OnScroll(nScrollCode, nPos, bDoScroll);
}
-- 以上

--------------------------------------
STOP HIV/AIDS.
Yahoo! JAPAN Redribbon Campaign 2005
http://pr.mail.yahoo.co.jp/redribbon/