背景:
    编了一个绘图程序,现已经可以放大缩小(点击鼠标左键放大,右键缩小)。
    (注:由于我的基本功不扎实,用setWorldTransform的方法没搞出来!我的方法很原始很蠢笨:绘图时把每个数据进行稍微的改造,如确定一个矩形的对角点为P1,P2。我可以再定义两个变换参数a,b,使矩形的参数表示为a*P1+b,a*P2+b,,默认下a=1,b=0,这样,画出的图形即为原图形;当需要缩放平移时,通过鼠标点击命令设置a++(或者--)或者a*=2(或者/=2)),通过鼠标移动命令设置b为移动的距离,这样就实现平移和缩放了啊(稍加改动,对称也可以实现)!如果要标注,则把得到的数据再除以a还原即可!)问题:
我想要缩放后,视口中心点附近展示的图形为缩放前左键点击的那一点的放大图,就要对缩放后的图形做平移需要得到画图区的中心点坐标,
1.问题是怎么获取画图区的中心点坐标?我这么干的:
  CClientDC dc(this);
  SIZE sizeView;
  sizeView=dc.GetViewportExt();//此条加了断点
但是好像没用。在最后一条代码后加了一个断点,发现sizeView.cx=1,sizeView.cy=1,但是我的窗口大小明显不是1X1大小的啊!
2.我想做一个实时变化的滚动条:当我画线至客户区边界时,滚动条会随着鼠标的向外移动而变短(这样,画图时,就不受客户区的大小限制了);该怎么做?
3.当我缩放图形时,想让滚动条随着放大倍数的变化而成比例地伸缩(这样,不管放大多少倍,我只要移动滚动条就可以看到视口以外的所有图形了),怎么办?(之前参考孙鑫的,做出来的滚动条是固定的)
我这么干,没成功:
 long a=(long)(1280*multiple);//multiple为缩放倍数,float型
 long b=(long)(800*multiple);
 SetScrollSizes(MM_TEXT,CSize(a,b));
4.我的屏幕为1280X800,我设置了SetScrollSizes(MM_TEXT,CSize(1280,800));为什么最大化后后,还是有滚动条啊!我改成SetScrollSizes(MM_TEXT,CSize(1277,678)),最大化后才没有滚动条的!什么原因? 

解决方案 »

  1.   

    第一个问题已解决:
    CRect rect;
    GetClientRect(&rect);
    然后(rect.right/2,rect.bottom/2)即为中心点。主要是我初学MFC,基本功不扎实,很多函数不知道。
      

  2.   

    2. 鼠标到达边缘时,用SetScrollSizes将滚动窗口加大,滚动条自然就变短了。
    3. 你做的应该可以成功,其实这个问题和2应该一样的。
    4. 因为你没有吧系统边框考虑进去,你设置了1280X800,但是去了边框就不够这么多了,还是需要滚。