我正在使用MFC做一个小型绘图工具。
我定义了五种形状:矩形,直线,圆形,椭圆形和圆形。 int m_drawType
用于在五种形状之间切换。
代码如下:
void CDrawToolView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_startRect=TRUE;
m_startPoint=point;
m_OldPoint=point;
::SetCursor(m_HCross);
CView::OnLButtonDown(nFlags, point);
}
void CDrawToolView::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.SetROP2(R2_NOT);
dc.SelectStockObject(NULL_BRUSH);
if(TRUE==m_startRect)
{
switch(m_drawType)
{
case 1://Rectangle
::SetCursor(m_HCross);
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.Rectangle(CRect(m_startPoint,point));
m_OldPoint=point;
break;
case 2: //Line
::SetCursor(m_HCross);
dc.MoveTo(m_startPoint);
dc.LineTo(m_OldPoint);
dc.MoveTo(m_startPoint);
dc.LineTo(point);
m_OldPoint=point;
break;
.
.
.
}
}
CView::OnMouseMove(nFlags, point);
}
void CDrawToolView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_startRect=FALSE;
::ClipCursor(NULL);
CClientDC dc(this);
dc.SelectStockObject(NULL_BRUSH);
switch(m_drawType)
{
case 1: //Retangle
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.Rectangle(CRect(m_startPoint,point));
break;
case 2: //Line
dc.MoveTo(m_startPoint);
dc.LineTo(m_OldPoint);
dc.MoveTo(m_startPoint);
dc.LineTo(point);
break;
.
.
.
}
CView::OnLButtonUp(nFlags, point);
}
void CDrawToolView::OnEditShape() // when click menu-edit-shape a dialog is pop up
{
CShapeDlg dlg;
dlg.DoModal();
}
弹出对话框如下:
我创建了一个包含五个按钮的对话框。我的问题是我不知道如何在按钮和这五个形状之间建立联系。有人可以帮助我吗?
答案 0 :(得分:1)
所以你的问题是如何设置CShapeDlg
设置m_drawType
的按钮?
您的对话框可以包含本地公开drawType
变量。为按钮引入按钮单击事件处理程序。
BEGIN_MESSAGE_MAP(CShapeDlg, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CShapeDlg::OnBnClickedButton1)
... etc.
ON_BN_CLICKED(IDC_BUTTON5, &CShapeDlg::OnBnClickedButton5)
END_MESSAGE_MAP()
使处理程序将局部drawType变量设置为整数值0 - 4,视情况而定。
void CShapeDlg::OnBnClickedButton1() { drawType = 0; }
... etc.
void CShapeDlg::OnBnClickedButton5() { drawType = 4; }
然后
if (dlg.DoModal() == IDOK)
m_drawType = dlg.drawType;
答案 1 :(得分:1)
对话框应该有一个m_drawtype变量,它在单击按钮时设置。当DoModal返回时,可以读取此变量以获得结果:
dlg.DoModal();
m_drawtype = dlg.m_drawtype;