实现画布的功能,请各位畅所欲言,来者有分

scxy 2002-06-02 06:50:52
开发一个绘图的软件,需要实现的功能:实现一个图形元件(以下称图元)的拖动,滚动浏览,放大缩小;
为了实现放大和缩小,映射模式设为MM_ANISOTROPIC,为了能表现拖动,我准备在后台建立一张画布,大小为整个图稿的实际大小,当图稿大小大于窗口大小时,显示滚动条,在拖动时得到坐标偏移量,每次滚动(Scrool)窗口后先在整张画布上画图,在把相应的从偏移坐标开始的屏幕相应大小的区域拷贝到试图区,但出现以下问题:
1、在MM_ANISOTROPIC模式下,原屏幕的映射模式是否应跟画布模式设为一样;
2、这样的设计思路是否有问题:因为我的程序没有达到实际的效果,现把OnDraw的样例代码贴出,请高手帮忙测试:
void CTestModeView::OnDraw(CDC* pDC)
{
CTestModeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CDC dcMem;
CBitmap bpMem;
CRect rectClient;

GetClientRect(&rectClient);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(1000, 1000);
pDC->SetViewportExt(rectClient.Width(), -rectClient.Height());
pDC->SetViewportOrg(rectClient.Width() / 2, rectClient.Height() / 2);


bpMem.CreateCompatibleBitmap(pDC, rectClient.Width(), rectClient.Height());
dcMem.CreateCompatibleDC(pDC);
CBitmap *pOldBitmap = dcMem.SelectObject(&bpMem);
dcMem.SetMapMode(MM_ANISOTROPIC);
dcMem.SetWindowExt(1000, 1000);
dcMem.SetViewportExt(rectClient.Width(), -rectClient.Height());
dcMem.SetViewportOrg(rectClient.Width() / 2, rectClient.Height() / 2);
dcMem.BitBlt(m_pointOffset.x, m_pointOffset.y, rectClient.Width(), rectClient.Height(),
pDC, 0, 0, SRCCOPY);
dcMem.Ellipse(-100, 100, 100, -100);

pDC->BitBlt(0, 0, rectClient.Width(), rectClient.Height(), &dcMem,
m_pointOffset.x, m_pointOffset.y, SRCCOPY);
dcMem.SelectObject(pOldBitmap);
dcMem.DeleteDC();
bpMem.DeleteObject();
}
...全文
36 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gigi_csdn 2002-06-02
  • 打赏
  • 举报
回复
恭喜!恭喜!!
超出能力,实属无奈!呵呵
scxy 2002-06-02
  • 打赏
  • 举报
回复
搞定
scxy 2002-06-02
  • 打赏
  • 举报
回复
按照以上的映射模式
只能画出x轴和y轴正方向的部分,其余部分均不能画出,迷惑
alexanderyu 2002-06-02
  • 打赏
  • 举报
回复
不会,很想知道……
scxy 2002-06-02
  • 打赏
  • 举报
回复
最后一推
scxy 2002-06-02
  • 打赏
  • 举报
回复
对CSDN越来越失望,没有高手,简单问题争相抢答
scxy 2002-06-02
  • 打赏
  • 举报
回复
提供参考原码的将高分相送

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧