繁体   English   中英

使用对话框中的按钮在MFC中选择形状

[英]Use button in a dialog to select shape in MFC

我正在用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();  
}

弹出对话框如下:

在此输入图像描述

我创建了一个包含五个按钮的对话框。 我的问题是我不知道如何在按钮和这五个形状之间建立联系。 有人可以帮助我吗?

所以你的问题是如何使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;

对话框应该有一个m_drawtype变量,它在单击按钮时设置。 当DoModal返回时,可以读取此变量以获得结果:

dlg.DoModal();  
m_drawtype = dlg.m_drawtype;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM