• ベストアンサー

pictureBoxに落書きするには・・・

vc++のマネージ形式で、buttonを使ってON/OFFの機能をつけて、pictureboxにマウスで落書きしたいんですが、どのプロパティを使えばいいかわかりません。 Penか、Graphicsのプロパティを使えばいいんですか? 何かいい例あったら教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんばんは。回答が付かないようですので、参考程度の回答をさせていただきます。  MSDNでも、落書きプログラムと思しきマウス処理の一部が載っていました。  http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.mousebuttons(VS.80).aspx  以下はMSペイントブラシの様に、マウスのドラッグでグニャ~っと、線を引きます。左ボタンで緑、右ボタンで赤です。  関数はピクチャーボックスプロパティの「イベント→マウス」の場所でそれぞれに対応させてください。 //メンバ変数 cli::array<PointF>^ m_arrPt; Graphics^ m_gfx; Pen^ m_pen; bool m_bCaptured; //マウスが押された瞬間 private: System::Void OnMouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { Color color = Color::Green; if(e->Button == System::Windows::Forms::MouseButtons::Right) color = Color::Red; m_bCaptured = true; m_gfx = pictureBox1->CreateGraphics(); m_pen = gcnew Pen(color); m_arrPt = gcnew cli::array<PointF>(2); PointF pt = PointF(e->X, e->Y); m_arrPt->SetValue(pt, 0); m_arrPt->SetValue(pt, 1); m_gfx->DrawPolygon(m_pen, m_arrPt); } //マウスが話された瞬間 private: System::Void OnMouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { m_bCaptured = false; } //マウスを動かしている最中 private: System::Void OnMouseMove(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { if(!m_bCaptured)return; PointF pt = PointF(e->X, e->Y); m_arrPt->SetValue(pt, 1); m_gfx->DrawPolygon(m_pen, m_arrPt); m_arrPt->SetValue(pt, 0); }

関連するQ&A

  • pictureBoxの絵保存について。

    pictureBoxにマウスを動かして絵を書いて、書いた絵を保存したいんですが、書いたデータは消えてしまいます。 なんでかわからないんで教えてください。例を載せときます。 cli::array<PointF>^ poi; Graphics^ grf; Pen^ pen; bool cap; private: System::Void pictureBox1_MouseMove(System::Object^sender, System::Windows::Forms::MouseEventArgs^ e) { if(!cap)return; PointF pt = PointF(e->X, e->Y); poi->SetValue(pt, 1); grf->DrawPolygon(pen, poi); poi->SetValue(pt, 0); // } private: System::Void pictureBox1_MouseDown(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { if(checkBox1->Checked == true){ Color color = Color::FromArgb(hScrollBar1->Value ,hScrollBar2->Value,hScrollBar3->Value); if(e->Button == System::Windows::Forms::MouseButtons::Right) color = Color::Red; 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); } } private: System::Void pictureBox1_MouseUp(System::Object^ sender, System::Windows::Forms::MouseEventArgs^ e) { cap = false; }

  • VC++:pictureBoxにイベントなしで描画

    前略 ・ Visual Studio 2012 のVC++を使っています。 フォームに貼り付けたピクチャーボックスに、フォームが表示された時にボタンクリック等特にイベントを発生させないでも 描画したいのですができません。 どなたか教えていただければ幸いです。  以下の例で具体的に教えてください。 ボタンもフォームに貼りつけてボタンクリックイベントの中に以下のようにコーディングしてボタンをクリックすると円が描けます。 どのようにすれば、ボタンクリックしないでもフォームが表示された時に、円がピクチャーボックスの中に描画されているようになるのででしょうか?    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { // 描画を行うグラフィックスクラスを生成 Graphics^ g = pictureBox1->CreateGraphics(); //円の描画 Pen^ blackPen = gcnew Pen(Color::Black, 3); g->DrawEllipse(blackPen, 50, 50, 75,75); //基点(50,50) 幅×高さ:75×75  } 以上、よろしくお願いします

  • vc++にて、画像の色の情報表示プロパティをおしえてください。

    vc++のマネージ形式で,bmpやjpgの画像からこの画像は、4byte、あの画像は24byteとの色情報が使われてるとか色情報をbuttonを押してlabelに表示したいのですがどのプロパティを使えばいいかわかりません。MSDNでも探しましたけどわかりませんでした。初心者なので適切に教えてくれたらうれしいです。

  • vc++のペイント処理。

    VC++のマネージ形式でピクチャーボックスにMousDownした時にMouseMoveを使って、絵で落書きするんですが、デバックして絵を書いた後、Formを最小化した後、元に戻すと、絵を書いたのに、書いた絵が消えてます。この時の絵を書くときには、PenとGraphicと配列処理(<arry> Point)を使いました。 今度は、SetPexelを使ってプログラムをくんで、Bitmapとして処理したら、pictureBoxにMousuDownして絵を書くと、点みたいに書けてゆっくりMousuDownしてるときは、線をかけるんですが、早く書こうとすると点々みたいのでかけますし、最小化しても消えません。 前者の方法だとスムーズにかけるんですが、消えちゃいます。 後者の場合はゆっくり書けば何とか線は書けるんですがスムーズに書けません。 どうしたら、最小化しても消えずにスムーズにかけますか?? 書ける方法てあるんですか??

  • (VC++2010)画像をドラッグしたいのですが

    VC++初心者です。 学校の課題で、 Buttonを押して、画像ファイルを読み込みpictureBox1に表示 ↓ pictureBox1上でマウスドラッグをして、ドラッグで選択された長方形の部分の画像をコピーし、pictureBox2に表示 というプログラミングを書きたいのですが、ドラッグのところで詰まってしまっています。 ドラッグを開始した座標などをどう上手く使って行けばいいのかがわかりません… 初心者すぎて質問の仕方もイマイチわからないのですがどなたか教えて頂けると幸いです。

  • 初歩的な質問なのですが。。。

    長文でお手数をかけますが、どうぞよろしくお願い致します。 VC++.NET2003にて、MFCアプリケーションを作成します。 アプリケーションの種類:シングルドキュメント プロジェクト形式:Windowsエクスプローラ 完了を押します。 CLeftViewクラスのOnInitialUpdateクラスに CTreeCtrl* pCtrl = &(this->GetTreeCtrl()); TVINSERTSTRUCT tvInsert; tvInsert.hParent = TVI_ROOT; tvInsert.hInsertAfter = NULL; tvInsert.item.mask = TVIF_TEXT; tvInsert.item.pszText = _T("test"); pCtrl->InsertItem(&tvInsert); このコードを挿入します。 ツールバーのプロジェクト→プロパティを開き、構成プロパティの全般で、マネージ拡張をはいにします。 上記でビルドして実行すると、エラーが出てしまいます。 マネージ拡張しているのは、ドキュメントクラスで.NET Frameworkのライブラリを使っているからです。 自分の見解は、全体をマネージアプリケーションとしてビルドしてるせいでエラーが出るのかなぁと思っているんですが、 (マネージ拡張をいいえにするとエラーが出なくなるので) プロジェクトやソースファイルのプロパティをどういじくってもうまくドキュメントクラスだけをマネージ拡張する事ができず、 また原因がマネージ拡張だとしても、ほかはアンマネージで書いているので、原因がよく分からず対処しようがないです。 マネージコードをあまり書きたくないので、できればドキュメントクラスのみをマネージ拡張する方法があれば、 それを教えて頂きたいです。よろしくお願いいたします。

  • VC++のマネージ形式での課題で・・・。

    VC++で、ビットマットフォーマットをマネージ形式でをする。課題がでました。 課題は、ピクチャーボックスにbmpファイルを表示して、表示したbmpからボタンを使って、ラベルや、テキストボックスに、そのbmpのバイト数や、画像に関する、情報を表示する課題です。 今は、ピクチャーボックスから画像を出すことはできたんですが、その後にどうやって画像に関する色のバイト数や、情報をマネージ形式で表示するかわかりません。 プログラムつくってもエラーばっかでわかりません。 例として、ボタン1をクリックして、ボタン1でラベルにbmpのバイト数を出したいんですがエラーします。 プログラム例は、  botton1 click ・・・ { bitmap^bmp; bmp = Bitmap("bmpのファイル名"); label1->Text = bmp; }   これで、ずっとエラーします。誰か適切なアドバイスください。いろいろサイトみてもMFC形式のやりかたばかりでわかりません。 マネージ形式でのやり方を教えてください。

  • ボタンについて

    以下のソースで、 マウスがボタンの上のある時、 ボタンがoffからonに変わりますが、マウスが離れた時には元にoffに戻ってしまいます。 これを、ほかのボタンを押す前までには、ずっとonの状態にするにはどうすればいいでしょうか? <a href="news.php" target="FrameMain" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image-lesson','','images/button_on.png',1)"> <img src="images/button_off.png" name="Image-lesson" width="141" height="32" border="0"> </a> よろしくお願い致します。

  • VC++.NETで利用できるGridについて

    VC++.NET2003のマネージ形式でアプリを作成しています。 DBは使用せず、直接Gridにコードでテキストを入力し表示させる。又、セル単位で色を変えたりしたいのですが、付属コンポーネントのDataGridではやり方が良くわかりませんでした。これは可能ですか? 製品版のGridも色々探してみたんですが、機能としてはあるんですが、VC++.NET未対応ばかりでした。 使用可能な製品版のGridをご存知の方教えてもらえませんか?

  • VC++6で作成したプログラムのラジオ・ボタンが勝手に・・・

    お世話様です VC++6でプログラムを作成したのですが、「アクティブウィンドを他に切替えて後、再度自作プログラムのウィンドウをアクティブにする」とラジオ・ボタンが勝手にOnされてしまいます。 自作プログラムでは複数のラジオ・ボタンを使用していますが、前回マウスでOn,Offをおこなったボタンが勝手にONされてしまうのです。 逆に勝手にOn->Offされてしまう事は無いようです。 普通はマウスクリックでラジオ・ボタンをOn、Offします。 自作プログラムなので、プログラム上で直したいのですがどうすれば良いのでしょうか、教えて下さい。

専門家に質問してみよう