CFormView的对话框,全屏显示绘图,添加了滚动条,在OnPaint()中写下如下代码
{CPaintDC dc(this);
dc.MoveTo(20,800);
dc.LineTo(20,1800);
}
图形超出了屏幕大小,我拖动滚动条到相应的坐标处没有图形显示出来。求教高人解答
{CPaintDC dc(this);
dc.MoveTo(20,800);
dc.LineTo(20,1800);
}
图形超出了屏幕大小,我拖动滚动条到相应的坐标处没有图形显示出来。求教高人解答
各小10倍,你这样超过 16位了
其中参数分别是水平的垂直滚动条的位置,这样就行了。但我不知道这是为啥,你能给看看吗
假设滚动条滚动了100 单位的距离,则相应的窗口原点应该移动100个单位,否则你画的始终在剪切区域外,当然就不会显示了。在onpaint,或者直接在onhscroll 滚动条事件中设置窗口原点:
SetWindowOrg(100,0)
CRect rect;
this->GetClientRect(&rect);
// 指针
pDC = this->GetDC();//屏幕绘图上下文设备的指针
//内存绘图
CBitmap memBitmap;//定义一个位图对象
CBitmap* pOldBmp = NULL;
memDC.CreateCompatibleDC(pDC);//内存绘图设备建立与屏幕显示设备兼容的内存显示设备
memBitmap.CreateCompatibleBitmap(pDC,rect.right,rect.bottom);//建立与屏幕显示兼容的位图
pOldBmp = memDC.SelectObject(&memBitmap);//将位图对象选入内存显示设备只有选入了位图的内存显示设备才有地方绘图,画到指定的位图 memDC.BitBlt(rect.left,rect.top,rect.right,rect.bottom,pDC,0,0,SRCCOPY);
memDC.SetWindowOrg(m_nHScrollPos, m_nVScrollPos);
memDC.MoveTo(90,900);
memDC.LineTo(90,9000);
pDC->BitBlt(rect.left,rect.top,rect.right,rect.bottom,&memDC,0,0,SRCCOPY);//将内存中的图拷贝到屏幕上进行显示 memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
memBitmap.DeleteObject();
上面是我在OnPaint()函数中的代码,我的滚动条范围SetScrollSize(12000,80000);拖动滚动条看不到绘制的直线能不能帮忙看一看
this->GetClientRect(&rect);//去掉这句,因为这句是绊脚石,它是取得你当前可见的区域做为画布大小,所以你永远不可能画到9000那里去
把CRect rect;改为CRect rect(0,0,900,9000);