0

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

まず、4つの形(長方形、線、円、楕円)から1つの形を選択して描画するダイアログを作成します。

次に、形状 ( startpoint.xstartpoint.ywidthheight) の座標を表示するモードレス ダイアログを作成します。

以下のようにダイアログを調整します。

ここに画像の説明を入力

最後に、他のパラメーターを選択するためのダイアログを作成します。OKボタンをクリックすると、形状の座標が に渡され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

または CDialogEx`から派生したダイアログCDialogでは、通常、ダイアログ ボックス内のコントロールに接続されているメンバー変数を宣言します。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 に答える