在MFC单文档中传递参数

时间:2013-09-07 10:31:14

标签: c++ mfc

我正在使用MFC做一个小型绘图工具。

首先,我创建一个对话框,从四个形状(矩形,直线,圆形,椭圆形)中选择一个形状,并绘制它。

其次,我创建了一个无模式对话框来显示形状的坐标(startpoint.xstartpoint.ywidthheight)。

协调对话框如下:

enter image description here

最后,我创建了一个对话框来选择其他参数。单击“确定”按钮时,形状的坐标将传递到void CPropertyDlg::OnBnClickedOk()。但我发现所有的坐标都是零,是因为对话框和坐标是瞬间的吗?关闭对话框后,坐标会自动设置为零?

获取DrawToolView.cpp坐标的代码,如下所示:

void CDrawToolView::OnLButtonUp(UINT nFlags, CPoint point)
{

    m_startRect=FALSE;
    ::ClipCursor(NULL);  
    CClientDC dc(this);  
    dc.SelectStockObject(NULL_BRUSH);  
    dc.Rectangle(CRect(m_startPoint,m_OldPoint));    // draw rectangle
    dc.Rectangle(CRect(m_startPoint,point));  
}

将坐标传递给void CPropertyDlg::OnBnClickedOk()的代码,如下所示:

void CPropertyDlg::OnBnClickedOk()
{
    UpdateData(); 
    CDrawToolView coordinate; 
    origin_x = coordinate.m_startPoint.x;
    origin_y = coordinate.m_startPoint.y;
    width = coordinate.m_OldPoint.x-coordinate.m_startPoint.x;
    height = coordinate.m_OldPoint.y-coordinate.m_startPoint.y;;
    OnOK();
}

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

在从CDialog或CDialogEx`中衍生的对话框中,您通常会声明与对话框中的控件相关联的成员变量 - 请参阅MSDN文章Dialog Data Exchange

调用UpdateData()后,对话框成员变量中将显示连接控件的值。在您的调用函数中,您可以执行类似

的操作
CPropertyDlg dlg;
dlg.m_origin_x = m_startPoint.x;
dlg.m_origin_y = m_startPoint.y;
dlg.m_width = coordinate.m_OldPoint.x-coordinate.m_startPoint.x;
dlg.m_height = coordinate.m_OldPoint.y-coordinate.m_startPoint.y;
if (dlg.DoModal == IDOK)
{   m_startPoint.x = dlg.m_origin_x;
    m_startPoint.y = dlg.m_origin_y;
    coordinate.m_OldPoint.x = m_startPoint.x + dlg.m_width;
    coordinate.m_OldPoint.y = m_startPoint.y + dlg.m_height;
    // take action
}