就是类似一些图像编辑软件里的裁剪功能,我拖拽出一个浮动选区,这个选区覆盖的范围能够传递回来,用来对图像相关部分操作
这个浮动选区只要简单的矩形和圆形就行了,因为返回中心和半径或者边长就可以确定选区范围了当然除了浮动本身还牵扯到鼠标相应或者键盘响应(拖拽,改变大小)感觉应该稍微复杂一些,所以方便的话可以给出例子,不方便的话可以指定一下参考文献PS,对话框上和文档视图上实现应该差不多吧bow~~

解决方案 »

  1.   

    你只要拖动画一个矩形或者圆,最简单用CRectTracker可以拖出一个矩形,然后记录矩形位置大小,自己绘制一下,至于其中的内容根据你的图像用GDI函数获取。
      

  2.   

    既然解决了,那我就简单说一下吧:
    CRectTracker类可以说很好很强大从网上找到代码结合MSDN看,基本上能做想得到的所有功能
    基本上只要Ondraw和OnLButtonDown这两个函数就行了,后者里面定义所有按下鼠标后对选区的移动拖拽操作,前者负责更新选区变化简单用法MSDN以及网上都能搜到,其他的都自己改即可,所以我主要补充几点
    它主要是定义出一个能被程序监听跟踪的矩形区域
    一般要先声明:有的时候被声明为MFC主构架的类成员(文档或者对话框),这是为了参数传递的需要。
    如果是临时的,在需要用的时候再声明也没问题
    MSDN里面给出了它的公有成员:
    m_nHandleSize     Determines size of resize handles. 
    m_rect            Current position (in pixels) of the rectangle. 
    m_sizeMin         Determines minimum rectangle width and height. 
    m_nStyle          Current style(s) of the tracker.还有一些非公有的MSDN一般不显示 ,但一般也用不到
    应该说你声明了CRectTracker成员后是不会显示什么东西的
    要对以上共有成员进行直接的设定,设定自然就用这些成员本身的方法即可
    比如对m_rect调用自身的set函数可设置初始大小,如果想让选取消失就设置成矩形四个顶点重合。
    至于我后来问的圆形选区的问题,这个根本不本质,因为MFC提供的矩形跟踪选区CRectTracker,只是因为矩形方便程序定位
    拖动鼠标改变的是一个矩形的大小和位置
    这个矩形可以是隐藏的(不画出来,或者设定为虚线)
    至于你自己想让选区看起来是一个其他形状,那就即时的获取这个矩形的位置大小(CRectTracker有方法),然后,在ondraw里以这个位置大小为参数画你想要的图形,比如内接园,外接圆甚至五角星等复杂图案这样,拖动,拉伸“CRectTracker的矩形选区”时,你自己设定的图形也跟着变化(更新调用ondraw即可),就相当于出来的是你自定义形状的选区至于选区包括那些地方,如果程序中选好后要用到,用CRectTracker的方法返回对应矩形选区的位置,根据你自定义“选区”的形状也很好自己计算出来对应的复杂图形的范围。
     
      

  3.   

    对了,灵活运用MFC提供的类和功能进行扩充,可以大大减少我们的开发难度。