- 締切済み
ペイント機能
VC++のMFCにて画像処理プログラムを作っているものです。 ペイントの機能を持たせたものを作りたいと考えています。 消しゴム、塗りつぶし、ペンの機能はどのようにつけたらよいのでしょうか? 分かる方がいらっしゃいましたらよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 大体以下で出来るとは思います。参考程度に。 (1)「ExtFloodFill」(塗り潰し) http://msdn.microsoft.com/ja-jp/library/4a6334kf(VS.71).aspx (2)「PolyLine」(鉛筆・消しゴム) http://msdn.microsoft.com/ja-jp/library/bzaz1k1h(VS.80).aspx (3)「ExtCreatePen」(消しゴム用のペン作成) http://msdn.microsoft.com/ja-jp/library/cc428590.aspx ・(1)はこんな感じです。 //マウス座標下の色彩を取る const COLORREF colorUnder = pDC->GetPixel(ptMouse); //紫色のブラシを作る CBrush brush; brush.CreateSolidBrush(RGB(255, 0, 255)); //デバイスコンテキストにブラシを選択する pDC->SelectObject(&brush); //マウス座標下からcolorUnderと一致する色彩を紫色に塗り潰す pDC->ExtFloodFill(ptMouse.x, ptMouse.y, colorUnder, FLOODFILLSURFACE); ・(2)(3)はこんな感じです。ペンのスタイルを変えれば共用できると思います。 //取り敢えず、ココらへんに描く POINT arrPt[2] = {{20, 20}, {21, 21}}; //緑色のソリッドブラシを指定する(今回ハッチスタイルは無視) const LOGBRUSH lBrush = {BS_SOLID, RGB(0, 255, 0), 0}; //丸いスタイルの太いペンを作る HPEN hPenGeo = ::ExtCreatePen(PS_GEOMETRIC | PS_SOLID | PS_ENDCAP_ROUND | PS_JOIN_BEVEL, 10, &lBrush, 0, 0); CPen pen; pen.Attach(hPenGeo); //デバイスコンテキストにブラシを選択する pDC->SelectObject(&pen); //描く pDC->Polyline(arrPt, 2); ・Polylineを使って描写する理由は、マウスをドラッグして引っ張り続ける間、途切れ目無く描き続ける為です。そうしないと、見た目が変になります。