我正在使用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();
}
有人可以帮助我吗?
答案 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
}