我在mfc做的ocx控件的onmove函数中写如下代码
void CHCOCX5Ctrl::OnMove(int x, int y)
{
COleControl::OnMove(x, y); // TODO: 在此处添加消息处理程序代码
AfxMessageBox("moving");
}
测试时,只有在显示时弹出了messagebox,之后用鼠标移动控件,没有messagebox弹出,请问是为什么? 而且,OnMoving()函数根本从来不起作用。像这样
void CHCOCX5Ctrl::OnMoving(UINT fwSide, LPRECT pRect)
{
COleControl::OnMoving(fwSide, pRect); // TODO: 在此处添加消息处理程序代码
AfxMessageBox("moving2");
}我的目的是想使一个非模态对话框跟随控件移动,除了这样可以有其它方法吗?谢谢

解决方案 »

  1.   

    OCX跟外界打交道要用到它的事件机制。
      

  2.   

    void CHCOCX5Ctrl::OnMoving(UINT fwSide, LPRECT pRect)
    {
    COleControl::OnMoving(fwSide, pRect); // TODO: 在此处添加消息处理程序代码
             if(hMainWnd!=NULL)::SendMessage(hMainWnd, WM_MOUSEMOVE, point.x, point.y); AfxMessageBox("moving2");
    }
      

  3.   

    像我开始那样直接弹出messagebox都不能成功,说明这个函数没有执行,这样的话,sendmessage也执行不到啊。我试验了,没反应
      

  4.   

    void CShow3dctlCtrl::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    if(!m_bDraw)return;
    /// FireMouseMove((long)nFlags, (short)point.x, (short)point.y);
    CPoint3D tMark; Env.MousePos.x =point.x;
    Env.MousePos.y =point.y;
    if(Env.bIsMoveable && bIsLBD)
    {
    SetCursor(Cursor_Drive);
    }
    CClientDC ClientDC(this);
    wglMakeCurrent(ClientDC.m_hDC,Env.hglrc);
    if(MarkPoint.bActive)
    {
    Env.MarkPoint3D.x += (point.x - OldMouseCoor[X])*Env.RoamGesture.DistStareEye/1000.0;
    Env.MarkPoint3D.y += (point.y - OldMouseCoor[Y])*Env.RoamGesture.DistStareEye/1000.0;
    OldMouseCoor[X] = point.x ;
    OldMouseCoor[Y] = point.y ;// MarkPoint.MakeModel(Env.MarkPoint3D.x,Env.MarkPoint3D.y,Env.MarkPoint3D.z,tP3D.x,tP3D.y);
    }
    else
    {
    // tMark = GetMouseModelCoordinate(point);
    // MarkPoint.MakeModel(tMark.x,tMark.y,tMark.z,tP3D.x,tP3D.y);
    //  Env.MarkPoint3D = MarkPoint.GetCoor();
    Env.MarkPoint3D = GetMouseModelCoordinate(point);
    }/* if(g_bLinkMode && Env.StereoMode & STEREO_DBC_M)
    {
    Env.SendStereoParameter();
    NetNotifyLink(&vMP,sizeof(vMPamOver));//ÓÃÓÚË«»ú
    }*/
    /// DisplayMouseModelCoordinate();
    wglMakeCurrent(ClientDC.m_hDC,NULL);
    if(hMainWnd!=NULL)::SendMessage(hMainWnd, WM_MOUSEMOVE, point.x, point.y);

    COleControl::OnMouseMove(nFlags, point);
    }