2 yatou2015 yatou2015 于 2015.05.29 15:33 提问

VC,很急、很急,求救!!

VC++ 6.0 中怎么使在View类视图上给绘制的网格线、图形、坐标轴等,在滚动条滚动时依旧能够显示,即重绘!!

4个回答

devmiao
devmiao   Ds   Rxr 2015.05.29 17:23
已采纳

如果你肯采纳我的回答,我可以写一个完整的例子给你。不过一个问题我只能挑一样做给你。比如演示下网格线和滚动视图的绘制。如果要全回答,最好你分开问。

yatou2015
yatou2015 我想要在移动滚动条之后原来给画在View类视图上的图形和坐标轴都还能显示!!
2 年多之前 回复
lx624909677
lx624909677   Ds   Rxr 2015.05.29 16:12

就是GDI绘图,现在绘制后有什么具体的问题?

yatou2015
yatou2015 现在绘制完之后,一移动滚动条图形和坐标轴就不显示了!
2 年多之前 回复
devmiao
devmiao   Ds   Rxr 2015.05.29 20:37
 void CQ185823View::OnDraw(CDC* pDC)
{
    CQ185823Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CPen pen1(PS_SOLID, 1, RGB(191, 191, 191));
    CPen pen2(PS_SOLID, 1, RGB(0, 0, 0));
    for (int i = 0; i <= 400; i++)
    {
        if (i % 10 == 0)
        {
            RECT rect;
            rect.left = 2001;
            rect.right = 2001 + 100;
            rect.top = i * 10;
            rect.bottom = i * 10 + 100;
            char num[10];
            itoa(i / 10 - 20, num, 10);
            pDC->DrawText(num, strlen(num), &rect, 0);
        }
        if (i % 10 != 0)
        {
            pDC->SelectObject(pen1);
        }
        else
        {
            pDC->SelectObject(pen2);
        }
        pDC->MoveTo(0, i * 10);
        pDC->LineTo(4000, i * 10);
    }
    for (i = 0; i <= 400; i++)
    {
        if (i % 10 == 0)
        {
            RECT rect;
            rect.left = i * 10;
            rect.right = i * 10 + 100;
            rect.top = 2001;
            rect.bottom = 2001 + 100;
            char num[10];
            itoa(i / 10 - 20, num, 10);
            pDC->DrawText(num, strlen(num), &rect, 0);
        }
        if (i % 10 != 0)
        {
            pDC->SelectObject(pen1);
        }
        else
        {
            pDC->SelectObject(pen2);
        }
        pDC->MoveTo(i * 10, 0);
        pDC->LineTo(i * 10, 4000);
    }
}

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

    CSize sizeTotal;
    // TODO: calculate the total size of this view
    sizeTotal.cx = sizeTotal.cy = 4000;
    SetScrollSizes(MM_TEXT, sizeTotal);
    POINT pt;
    RECT rect;
    GetClientRect(&rect);
    pt.x = 2000 - (rect.right - rect.left) / 2;
    pt.y = 2000 - (rect.bottom - rect.top) / 2;
    ScrollToPosition(pt);
}

devmiao
devmiao   Ds   Rxr 2015.05.29 20:45

图片说明

Csdn user default icon
上传中...
上传图片
插入图片