0

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

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

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

坐标对话框如下:

在此处输入图像描述

最后,我创建了一个对话框来选择其他参数。单击确定按钮时,形状的坐标将传递给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();
}

有人可以帮我吗?

4

1 回答 1

1

在派生自 CDialogExCDialog或 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
}
于 2013-09-07T10:49:31.043 回答