我在对话框类的某个函数中获得一个CStatic控件的CDC后,在CStatic内部绘图,但是所绘图形过大,超过CStatic的范围的话就会画在对话框上,有什么办法能让图形过大时,让控件具备滚动功能?或者有其它更好的控件可以实现滚动绘图功能?请大侠指教,谢谢!!

解决方案 »

  1.   

    不是有个Picture控件可供你使用吗?
    方法一:想限定绘图区域的话,可以在内存中先绘图。再按CStatic的大小BitBlt()过来,为CStatic添加滚动条然后自己处理滚动条消息和相关的CStatic上的图的滚动逻辑
    方法二:可用剪裁区域来画图,即指定某个区域是可以被绘图的。在这个区域以外的地方,绘图无效。即被会这个区域的边界给裁掉。只留下在区域内的图形。把从CStatic得到的CDC进行这样的设定剪载区域,那么在这个CDC上的绘图就不会超出这个设定的剪载区域的范围。而且这个也是手动处理滚动逻辑
    CreateRectRgn ()//创建矩形区域
    CombineRgn ()//合并两个区域
    SelectClipRgn ()//设定剪载区域
    但相比之下在内存中绘声绘图,绘完再粘到对话框上更容易简便些