1

私はMFCスクロールビューの操作が初めてで、ScrollViewクラスの関数onPaintに大きな画像を表示しています。これは、コードに続く初期更新時関数です

void CCenterImageView::OnInitialUpdate()
{
    CScrollView::OnInitialUpdate();

    // TODO: Add your specialized code here and/or call the base class

    CSize sizeTotal;
    // TODO: calculate the total size of this view
    sizeTotal.cx = m_matImage.cols;
    sizeTotal.cy = m_matImage.rows;
    SetScrollSizes(MM_TEXT, sizeTotal,sizeTotal);

}

void CCenterImageView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: Add your message handler code here and/or call default

    CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);

    //Invalidate();
}

void CCenterImageView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: Add your message handler code here and/or call default

    CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
    UpdateData();
    //Invalidate();
}

void CCenterImageView::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    // TODO: Add your message handler code here
    // Do not call CView::OnPaint() for painting messages

    if(m_CVvImageObj.GetImage())
    {       
        //this function blit the bitmap on the screen height and width are more than 1000 pixels
        m_CVvImageObj.Show(dc.GetSafeHdc(),0,0,m_CVvImageObj.Width(),m_CVvImageObj.Height());
    }


}

このhttp://www.functionx.com/visualc/views/scrollview.htmを使用すると、垂直スクロールと水平スクロールが表示されますが、それらを押してもビューの何も変わりません。ユーザーのクリックでスクロールを移動し、ビューを変更する方法を教えてください。

4

2 に答える 2

1

CScrollView は、SetScrollSizes を使用してサイズを決定する大きなキャンバスにペイントしているかのように機能します。設定するサイズは通常、画像全体のサイズであり、ほとんどの場合、画像が表示されているウィンドウよりも大きくなります。

次に、OnDraw を処理するときに、行ったようにイメージ全体をペイントするか、表示されている部分のみをペイントすることができます。これは、GetClipBox から確認できます。CScrollView は表示されていない部分をクリップするため、後者は効率のためにのみ必要です。

OnXScroll ハンドラはまったく必要ありません。それらを削除し、スクロールに応じてそれがすべてである場合は、CScrollView にスクロールを処理させる必要があります。

画像のサイズが >=2^15 の場合は問題がありますが、それはあなたの状況のようには聞こえません。

于 2013-01-18T07:10:02.547 に答える
0

あなたのコードは怪しいと思われます (3 番目の引数)。ただし、32K を超えるスクロールの問題に関連している場合は、ナレッジ ベースの記事「PRB: CScrollView のスクロール範囲が 32K に制限されている」(記事 ID: 166473) を参照してください。

于 2013-07-21T14:23:25.903 に答える