- ベストアンサー
VC++のペイント処理で絵が消えてしまう問題を解決する方法
- VC++のマネージ形式でピクチャーボックスにMousDownした時にMouseMoveを使って、絵で落書きする際、元に戻すと絵が消えてしまう問題が発生しています。
- SetPexelを使ってプログラムを処理し、pictureBoxにMousuDownして絵を書くと点状になる問題があります。
- 最小化しても絵が消えず、スムーズにかける方法を知りたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Bitmapにしても DrawPolygonで描画すればいいのですよ 直接描画の場合 grf = pictureBox1->CreateGraphics(); Bitmap描画の場合 grf = Graphics::FromImage( bmp ); といった具合に Graphicsオブジェクトの構築方法を変更します Bitmap描画の際MouseMoveやMouseDownから抜ける前に pictureBox1->Image = bmp; といった具合に描画したBitmapをピクチャーボックスに設定しましょう http://oshiete1.goo.ne.jp/qa4367456.html のコードの中のMouseDown > cap = true; > grf= pictureBox1->CreateGraphics(); > // > // > pen = gcnew Pen(color); > poi = gcnew cli::array<PointF>(2); > PointF pt = PointF(e->X, e->Y); > poi->SetValue(pt, 0); > poi->SetValue(pt, 1); > grf->DrawPolygon(pen, poi); > } の部分を cap = true; // Bitmapを構築 try { // ビットマップbmpが作成済みかどうかのチェック int n = bmp->Width; } catch( NullReferenceException^ ex ) { // 未作成の場合は作成する bmp = gcnew Bitmap( pictureBox1->Width, pictureBox1->Height ); } // grfの構築方法の変更 // grf = pictureBox1->CreateGraphics(); grf = Graphics::FromImage( bmp ); // // pen = gcnew Pen(color); poi = gcnew cli::array<PointF>(2); PointF pt = PointF(e->X, e->Y); poi->SetValue(pt, 0); poi->SetValue(pt, 1); grf->DrawPolygon(pen, poi); // ピクチャーボックスの更新 pictureBox1->Image = bmp; } といった具合ですよ MouseMoveの最後にも grf->DrawPolygon(pen, poi); poi->SetValue(pt, 0); // ピクチャーボックスの更新 pictureBox1->Image = bmp; を追加します