ピクチャーボックスに半径とx座標、y座標の数値を入れて円と四角を描画したいので
すがどのようなことをしたらいいのでしょうか?円を表示するにはEllipse、四角を表示
すにはRectAngleを使うのはわかるのですが・・・・。教えてくださいお願いします。
まずは環境を明記してください。
・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
が参考になるでしょう。
osはxpです。visual stadio2005使っています。表示はできました。でも描画しても消え
てしまいます。描画したら消えないようにするにはどうしたらいいんでしょうか?
> ・プロジェクトの種類
は?MFC?
そういう処理はOnPaintイベントに書きます。
MFCです。OnPaint,OnDraw以外にほかはないんでしょうか?
グラフィックの描画をするのであれば、
Windowsの描画に仕組みを理解する必要があります。
闇雲に描画の関数を呼ぶだけでは駄目です。
イベントドリブンと言う考え方を勉強して
Windowsの描画に仕組みがどのようになっているのかを
入門書やWebのホームページ等で勉強しましょう。
単にコーディングパターンだけを覚えても意味がないですよ。
> OnPaint,OnDraw以外にほかはないんでしょうか?
この質問の意図は何でしょうか?再描画のタイミングはここしかないようですけど。
> OnPaint,OnDraw以外にほかはないんでしょうか?
Blueさんのご指摘と同じく、これはどういうことでしょう??
「OnPaintやOnDrawみたいな機能をもった関数は作れないですか??」
っていうことですか??
「それとも OnPaintやOnDrawの中にすべてを記述しないといけないのですか??」
っていうことですか?? 描画したいことは普通はこれらに記述しますが
ね・・・・!!
説明不足ですみません。ビットマップを作成してその中に図形を描画して、
ピクチャーボックスに表示するのですが、ビットマップの作成して表示させるには
どうしたらよいのでしょうか。
「ビットマップの作成」とか検索すればいくらでも出るけど何がわからないの?
・どんな検索ワードを入れればいいかわからない?
・調べて実際にやってみたけどわからない?
何をしてどうなったか伝えられないとどうしようもないよ。
調べてビットマップの作成まではできたのですが、ビットマップに図形描画ができない
んです。ソース載せるのでアドバイスお願いします。
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 );
つたないソースですが、わかりやすくするには直したほうが良いところがありましら、
アドバイスしてください。お願いします
ぱっと見で、未確認ですが、
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 の方に対してやりたいのでしょうか。