matlab中的stripchart空间是专门用来绘图的,在模态对话框上添加这个控件,可以通过按住左键拖拉放大指定区域。但是当这个对话框成为非模态时,就报错退出了。
对非模态对话框不熟悉,有没有高手可以指点一下。
自己感觉可能的因素:焦点问题?坐标问题?

解决方案 »

  1.   

    CDisplayDlg *pDlg=new CDisplayDlg;
    pDlg->Create(IDD_DISPLAYDLG,this);
    pDlg->ShowWindow(SW_SHOW);
    //  CDisplayDlg myCDlg;
    //  myCDlg.DoModal();其他的都没改,只是把下面注释的代码换成上面生成非模态对话框的代码,空间可以显示,但是不能拖动。
    鼠标左键摁下响应函数第一句就说出错了
    x_start=strip_chart->GetCursorX();//用来获得空间中cursor坐标
    y_end=strip_chart->GetCursorY();
    在线等,高手请帮忙
      

  2.   

    忘了说了,是在VC6 MFC下使用这个控件
      

  3.   

    为非模式对话框书写消息循环,应该是WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE这三个。模式对话框的消息循环由系统自动处理,所以不需要人为的干预。对于MatLab,还是用模式比较好,因为内部的消息循环机制你不清楚。
      

  4.   

    高手,我觉得可能是你说的这个原因,下面三个函数是strip_chart控件里面带的event.项目要求必须要用非模态,请问应该怎么解决这个问题呢void CDisplayDlg::OnMouseDownStripctrl1(short Button, short Shift, long X, long Y) 
    {

    x_start=strip_chart->GetCursorX();
    y_end=strip_chart->GetCursorY();
    CString str;
    str.Format("%d",x_start);

    str.Format("%d",y_end);

    }void CDisplayDlg::OnMouseMoveStripctrl1(short Button, short Shift, long X, long Y) 
    {
    if(x_start!=-10000) 
    {
    strip_chart->ClearVariable(1);//四条虚线每次画之前必须清除
    strip_chart->ClearVariable(6);
    strip_chart->ClearVariable(3);
    strip_chart->ClearVariable(4);
    x_mov=strip_chart->GetCursorX();
    y_mov=strip_chart->GetCursorY();
    strip_chart->SetVariableID(3);
    strip_chart->SetVariableColor(10109999);
    strip_chart->AddXY(3,x_start,y_end);
    strip_chart->AddXY(3,x_mov,y_end);
    strip_chart->SetVariableLineStyle(2);/////虚线
    /////////////////////////////////////////////////////////////////////////////////
    strip_chart->SetVariableID(4);
    strip_chart->SetVariableColor(10109999);
    strip_chart->AddXY(4,x_start,y_end);
    strip_chart->AddXY(4,x_start,y_mov);
    strip_chart->SetVariableLineStyle(2);

    strip_chart->SetVariableID(1);
    strip_chart->SetVariableColor(10109999);
    strip_chart->AddXY(1,x_start,y_mov);
    strip_chart->AddXY(1,x_mov,y_mov);
    strip_chart->SetVariableLineStyle(2);/////虚线

    strip_chart->SetVariableID(6);
    strip_chart->SetVariableColor(10109999);
    strip_chart->AddXY(6,x_mov,y_end);
    strip_chart->AddXY(6,x_mov,y_mov);
    strip_chart->SetVariableLineStyle(2);/////虚线
    }


    }void CDisplayDlg::OnMouseUpStripctrl1(short Button, short Shift, long X, long Y) 
    {
    x_end=strip_chart->GetCursorX();
    y_start=strip_chart->GetCursorY();
    CString str;
    str.Format("%d",x_end);


    str.Format("%d",y_start);

    strip_chart->SetLastX(x_end);
    strip_chart->SetXSpan(x_end-x_start);
    strip_chart->SetTrackDisplayMax(y_end);
    strip_chart->SetTrackDisplayMin(y_start);
    x_start=-10000;

    }
      

  5.   

    event.项目要求必须要用非模态?这个么,我对MatLab的内部机制没有进行过很深的研究诶,不是很清楚呢。
    建立个默认的消息循环试试:
    要不这样,你重载下那个非模式对话框的类的PreTranslateMessage函数试试,为那几个消息添加空的处理让系统接管看行不行