図形描画について教えてください – プログラミング – Home

図形描画について教えてください
 
通知
すべてクリア

図形描画について教えてください

固定ページ 1 / 2

まりお
 まりお
(@まりお)
ゲスト
結合: 19年前
投稿: 16
Topic starter  

ピクチャーボックスに半径とx座標、y座標の数値を入れて円と四角を描画したいので
すがどのようなことをしたらいいのでしょうか?円を表示するにはEllipse、四角を表示
すにはRectAngleを使うのはわかるのですが・・・・。教えてくださいお願いします。


引用解決済
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

まずは環境を明記してください。

・OS
・コンパイラのバージョン
・プロジェクトの種類

それによって回答が微妙に違います。
一応、Win32 Application の場合は定番の

http://www.kumei.ne.jp/c_lang/sdk/sdk_24.htm
http://www.kumei.ne.jp/c_lang/sdk/sdk_25.htm

が参考になるでしょう。


返信引用
まりお
 まりお
(@まりお)
ゲスト
結合: 19年前
投稿: 16
Topic starter  

osはxpです。visual stadio2005使っています。表示はできました。でも描画しても消え
てしまいます。描画したら消えないようにするにはどうしたらいいんでしょうか?


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> ・プロジェクトの種類
は?MFC?

そういう処理はOnPaintイベントに書きます。


返信引用
まりお
 まりお
(@まりお)
ゲスト
結合: 19年前
投稿: 16
Topic starter  

MFCです。OnPaint,OnDraw以外にほかはないんでしょうか?


返信引用
とりあえず
 とりあえず
(@とりあえず)
ゲスト
結合: 22年前
投稿: 5
 

http://www.hyuki.com/writing/techask.html
これ読んでください


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

グラフィックの描画をするのであれば、
Windowsの描画に仕組みを理解する必要があります。
闇雲に描画の関数を呼ぶだけでは駄目です。
イベントドリブンと言う考え方を勉強して
Windowsの描画に仕組みがどのようになっているのかを
入門書やWebのホームページ等で勉強しましょう。

単にコーディングパターンだけを覚えても意味がないですよ。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> OnPaint,OnDraw以外にほかはないんでしょうか?
この質問の意図は何でしょうか?再描画のタイミングはここしかないようですけど。


返信引用
ドルドル
 ドルドル
(@ドルドル)
ゲスト
結合: 19年前
投稿: 96
 

> OnPaint,OnDraw以外にほかはないんでしょうか?
 Blueさんのご指摘と同じく、これはどういうことでしょう?? 
 「OnPaintやOnDrawみたいな機能をもった関数は作れないですか??」
っていうことですか??
 「それとも OnPaintやOnDrawの中にすべてを記述しないといけないのですか??」
っていうことですか?? 描画したいことは普通はこれらに記述しますが
ね・・・・!!


返信引用
まりお
 まりお
(@まりお)
ゲスト
結合: 19年前
投稿: 16
Topic starter  

説明不足ですみません。ビットマップを作成してその中に図形を描画して、
ピクチャーボックスに表示するのですが、ビットマップの作成して表示させるには
どうしたらよいのでしょうか。


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

参考にどうぞ。
http://www.geocities.jp/chiakifujimon/makesoft2/proc3.html


返信引用
聞く前に調べた?
 聞く前に調べた?
(@聞く前に調べた?)
ゲスト
結合: 19年前
投稿: 1
 

「ビットマップの作成」とか検索すればいくらでも出るけど何がわからないの?
・どんな検索ワードを入れればいいかわからない?
・調べて実際にやってみたけどわからない?

何をしてどうなったか伝えられないとどうしようもないよ。


返信引用
まりお
 まりお
(@まりお)
ゲスト
結合: 19年前
投稿: 16
Topic starter  

調べてビットマップの作成まではできたのですが、ビットマップに図形描画ができない
んです。ソース載せるのでアドバイスお願いします。

CWnd* mybyouga=GetDlgItem(IDC_byouga);
//デバイスコンテキストの取得
CDC* pDC=mybyouga->GetDC();
CClientDC myCLDC(mybyouga);

CRect myRECT;
mybyouga->GetClientRect(myRECT);
//ビットマップに描画する用
CBitmap myBmp; //表示用ビットマップ
CDC myDC; //ビットマップ用デバイスコンテキスト
CDC *pmyDC = &myDC;
//DC作成
myDC.CreateCompatibleDC( pDC );
//bmp作成
myBmp.CreateCompatibleBitmap( pDC,myRECT.Width(),myRECT.Height() );
//DCにビットマップを選択
myDC.SelectObject( &myBmp );
//始めに塗りつぶしておく必要あり
myDC.FillSolidRect(myRECT,RGB( 255, 255, 255 ) );

CSpinButtonCtrl* spin1=(CSpinButtonCtrl*)GetDlgItem(IDC_SRADIUS);
CSpinButtonCtrl* spin2=(CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_Z_X);
CSpinButtonCtrl* spin3=(CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_Z_Y);

rad = GetDlgItemInt(IDC_RADIUS);
spin1->SetPos(rad);
int zx,zy;
zx = GetDlgItemInt(IDC_X);
spin2->SetPos(zx);
x = zx + 256;
zy = GetDlgItemInt(IDC_Y);
spin3->SetPos(zy);
y = 256- zy;

if(rad < 1 || rad > 256 || zx < -256 || zx > 256 || zy < -256 || zy > 256)
{
AfxMessageBox(L設定範囲超えてるよ!直せ);}

CBrush myBrush;
myBrush.CreateSolidBrush(RGB(red,green,blue));
pDC->SelectObject(&myBrush);
CButton* radio1=(CButton*)GetDlgItem(IDC_RADIO1);
CButton* radio2=(CButton*)GetDlgItem(IDC_RADIO2);
if(radio1->GetCheck()){
pDC->Ellipse(x+rad,y+rad,x-rad,y-rad);
}else if(radio2->GetCheck()){
pDC->Rectangle(x+rad,y+rad,x-rad,y-rad);}

pDC->BitBlt( 0, 0,myRECT.Width(),myRECT.Height(), pmyDC, 0, 0, SRCCOPY );


返信引用
まりお
 まりお
(@まりお)
ゲスト
結合: 19年前
投稿: 16
Topic starter  

つたないソースですが、わかりやすくするには直したほうが良いところがありましら、
アドバイスしてください。お願いします


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

ぱっと見で、未確認ですが、

pDC->Ellipse(x+rad,y+rad,x-rad,y-rad);
  -- snip --
pDC->BitBlt( 0, 0,myRECT.Width(),myRECT.Height(), pmyDC, 0, 0, SRCCOPY );

pDC に書いた後、BitBltで上書きしてませんか?

Ellipse は pmyDC の方に対してやりたいのでしょうか。


返信引用
固定ページ 1 / 2

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました