0

mfc ダイアログ ベースでは、CDispView は CScrollView から駆動されます。左クリックでポイントにズームインし、右クリックでズームアウトする必要があります。以下は部分的に動作します。それをより良くする方法はありますか?それに応じてスクロールバーのサイズを変更したり、ポイントをズームインしたりします。

xzfac = 1;
yzfac = 1;

void CDispView::OnInitialUpdate()
{
   SetScrollSizes(MM_TEXT, CSize(cWidth, cHeight));
   CScrollView::OnInitialUpdate();
}

void CDispView::OnDraw(CDC* pDC)
{
StretchDIBits(pDC->GetSafeHdc(), 0, 0,
(xzfac * pBmpInfo->bmiHeader.biWidth),
(yzfac * pBmpInfo->bmiHeader.biHeight),
0, 0, pBmpInfo->bmiHeader.biWidth, 
pBmpInfo->bmiHeader.biHeight,
imageBuf, pBmpInfo, DIB_RGB_COLORS, 
SRCCOPY);
}

void CDispView::refresh()
{
    OnInitialUpdate();

}

void CDispView::OnLButtonDown(UINT nFlags, CPoint point)
{
    yzfac = yzfac + 1;
    xzfac = xzfac + 1;

    refresh();
    RedrawWindow();

    CScrollView::OnLButtonDown(nFlags, point);
}

void CDispView::OnRButtonDown(UINT nFlags, CPoint point)
{
    yzfac = yzfac - 1;
    if (yzfac < 1) yzfac = 1;
    xzfac = xzfac - 1;
    if (xzfac < 1) xzfac = 1;

    refresh();
    RedrawWindow();

    CScrollView::OnRButtonDown(nFlags, point);
}
4

2 に答える 2

-1

CView::OnPrepareDC メソッドをオーバーライドできます。これは OnDraw の直前に呼び出され、ズーム効果を提供するために CDC を別の倍率とオフセットに調整する場所です。たとえば、この機能は印刷時に使用されます。CDC のスケールを変更することで、画面表示と印刷の両方で OnDraw を同じにします。

于 2013-05-11T04:42:15.057 に答える