WindowsXp VC6.0 MFC 環境です
描画作成のコードを作っています。
現時点では
マウス操作
void CChildView::OnMouseMove( UINT nFlags, CPoint point )
{//略
//描画内容に変化をを要すると
Invalidate(FALSE);
//CWnd::OnMouseMove( nFlags, point );//在ってもなくてもOK,なんの役割するか?未勉強
}// endof void CChildView::OnMouseMove
void CChildView::OnLButtonUp( UINT nFlags, CPoint point )
{//途中略
Invalidate(FALSE);//このコードでOnPaintを呼んでいるみたい
}//end of CChildView::OnLButtonUp
あるいは
CParameterDlg::CParameterDlg(CWnd* pParent /*=NULL*/)
: CDialog(CParameterDlg::IDD, pParent)
{// ここでも
Invalidate(FALSE);
//がある
}
でColorDialogを呼ぶ(新たな場所の描画線の色を変える目的に)
などして その都度
void CChildView::OnPaint()
{ // TODO: Add your message handler code here
CPaintDC dc(this); // device context for painting
CMemDC memDC;
memDC.CreateDIBitmap( m_imageSiH, m_imageSiV );// creat an image area in the window
memDC.FillSolidRect(0, 0, m_imageSiH, m_imageSiV, m_grdColor); //ground color
//略
// Do not call in the original Why?? for painting messages
// CWnd::OnPaint(); // CChildView:: この終わりがよくわからない 現行は削除
}
内で表示を書き換えています。
これを 一部書き終えたら 既存で書いたものに一部分を上書きできるように
変えたいのです。
質問は Invalidate(FALSE)は再描画するコードで”背景を一旦塗りつぶす必要が無い時に呼ぶ”
と理解していますが、
前の描画内容の一部をそのままで描画するには どういう方法があるのでしょうか?
簡単なコードを示したいのですが OnPaint()のどれがエッセンスか 分かりにくく
どのようなところを取り出すと良いか 分かりかねている状態です
なお 実際の絵の最小見本はHPの動画∞です。これは一筆の図ですが、∞∞のような2筆の
色別でloopを描きたいのです。
よろしく ご助言をおねがいします
実は 操作上、マウスの位置で描画条件(線の交点)を指定し、それを赤棒で表示しています。そのためには マウスが新たに移動する度に、その赤棒と表示する 即ち更新しているのです。すると 他の線の描画を残して 新たな線の描画を追加するということは 赤棒の表示の更新と 線の描画要請と食い違うことになるので 課題のようなことはできないかとも 懸念している次第です。
この懸念は正しいでしょうか?
でも OnPaint内で 線毎のデータを用意して、各線毎に描くとして 色などはの選択をDialogで行うのはどのようにしたら良いでしょうか?
それと 線の描く(Trace)する開始をやはりマウス位置でしていしているのですが それも途中で変えるにはどうするのでしょうか
、
実は 操作上、マウスの位置で描画条件(線の交点)を指定し、それを赤棒で表示しています。そのためには マウスが新たに移動する度に、その赤棒と表示する 即ち更新しているのです。すると 他の線の描画を残して 新たな線の描画を追加するということは 赤棒の表示の更新と 線の描画要請と食い違うことになるので 課題のようなことはできないかとも 懸念している次第です。
この懸念は正しいでしょうか?
でも OnPaint内で 線毎のデータを用意して、各線毎に描くとして 色などはの選択をDialogで行うのはどのようにしたら良いでしょうか?
それと 線の描く(Trace)する開始をやはりマウス位置でしていしているのですが それも途中で変えるにはどうするのでしょうか
、
ツイート | ![]() |