比如我画图画一个三角形就是有个类专门用来画三角形,然后我想到三角形的类中响应鼠标事件,比如鼠标点击刚刚画的三角形区域的话,弹出一个消息框,这个处理过程我想放在这个三角形的类中实现,请问改如何实现。

解决方案 »

  1.   

    PtInRegion来判断点是否在那个图形区域中,是的就弹出窗口
      

  2.   

    GetDlgItem()  -> m_hwnd 判断
      

  3.   

    最简单的办法(适用于任何图形)是
    产生一个内存DC,然后,在DC中画上你想检测的图形,然后根据鼠标的位置来调用该DC的GetPixel来判断不是黑色即鼠标的位置在图形内,如果有多个图形就使用不同的颜色画,然后根据颜色来判断点在哪个图形内
      

  4.   

    不需要任何基类,选择Generic Class就可以
    Class CTrigon
    {
    public:
       CTrigon();
       CTrigon(CPoint p1, CPoint p2, CPoint p3);  //构造你的三角形
      ~CTrigon();
       void Draw(CDC* pDC);         //在该函数内绘制三角形
        void OnLButtonDown(CPoint pnt);//在该函数内判断pnt是否在本三角范围之内,是则弹出对话框protected:
       CPoint p1, p2, p2
    };在你的视图类中定义一个CTrigon对象
        CTrigon m_pTrigon;
    在你的视图类OnDraw函数内调用三角类的绘制函数
        m_pTrigon.Draw( pDC );
    这样就绘制出三角形了然后你的视图类OnLButtonDown函数内调用三角类的OnLButtonDown函数
        m_pTrigon.OnLButtonDown( point );这样你在视图内点击鼠标时,三角对象也自动分析是否要动作了
      

  5.   

    protected: 
      CPoint m_pnt1, m_pnt2, m_pnt2 
      

  6.   


    多少个都没有问题。
    定义一个对象数组,动态创建后放入数组内,鼠标点击后,遍历数组对象,调用每个对象的OnLButtonDown,
      

  7.   

    THCNC说得对,你可以定义一个数组,或者是弄一个vector来动态装载你的对象(三角形)个数:
    vector <CTrigon> m_vecTrig;在你添加一个三角形时:
    CTrigon tr;
    ...// 初始化tr
    m_vecTrig.push_back( tr );然后在你的视图类OnLButtonDown函数内调用三角类的OnLButtonDown函数 
    long l;
    for ( l = 0; l < m_vecTrig.size(); l++ )
       m_vecTrig[l].OnLButtonDown( point );然后在你的CTrigon类中实现OnLButtonDown()函数就行了