0

MFCで小さな描画ツールをやっています。

四角形、線、円、楕円、点の 5 つの形状を定義します。intm_drawTypeは、5 つの形状を切り替えるために使用されます。

コードは次のとおりです。

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();  
}

以下のようなポップアップダイアログ:

ここに画像の説明を入力

5 つのボタンのダイアログを作成しました。私の問題は、ボタンとこれらの 5 つの図形をリンクする方法がわからないことです。誰かが私を助けることができますか?

4

2 に答える 2

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;
于 2013-09-06T12:41:56.500 に答える