0

さて、私はMFCを使用していくつかの小さなWindowsアプリケーションを構築し、物事がどのように機能するかを学ぼうとしています。国の旗を描いている間、行き詰まりました。次のコード行は、真ん中の長方形の真ん中に3つの長方形と円を描画します。次に行う必要があるのは、スポークを円に描画することです。つまり、直径8つを45度の角度で分離します。

void CMainWindow::OnPaint (){
CPaintDC dc(this);
for (int i=0;i <=100;i+=50) {
    dc.SetBkMode(TRANSPARENT);
    CRect rect;
    CPen pen(PS_SOLID, 1, RGB(0,0,0));
    CPen *oldPen = dc.SelectObject(&pen);
    if (i == 0){
         CBrush brush(RGB(255,130,0));
         CBrush *oldBrush = dc.SelectObject(&brush);
         dc.Rectangle(75,(i+50),275,(i+100));
    }
    else if(i == 50) {
         CBrush brush(RGB(255,255,255));
         CBrush *oldBrush = dc.SelectObject(&brush);
         dc.Rectangle(75,(i+50),275,(i+100));
         CPen pen2(PS_SOLID, 1,RGB(0,0,255));
         CPen *oldPen = dc.SelectObject(&pen2);
         dc.Ellipse(150,100,200,150);
    }
    else {
         CBrush brush(RGB(34,139,34));
         CBrush *oldBrush = dc.SelectObject(&brush);
         dc.Rectangle(75,(i+50),275,(i+100));
    }
}

それを行う方法がわかりません。MFCライブラリで見つけようとしましたが、うまくいきませんでした。

4

3 に答える 3

1

これがsin()cos()メソッドの例です。コードブロック全体をforループに入れる意味がわかりませんでした。その部分を削除したことを示してください。

#include "math.h"
#define PI 3.1415926535898
void DrawIndiaFlag(CDC & dc , int x, int y)
{
    dc.SetBkMode(TRANSPARENT); 
    CRect rect; 
    CPen pen(PS_SOLID, 1, RGB(0,0,0)); 
    CPen *oldPen = dc.SelectObject(&pen); 

    {
        CBrush brush(RGB(255,130,0)); 
        CBrush *oldBrush = dc.SelectObject(&brush); 
        dc.Rectangle(x,(y),x+200,(y+50)); 
        dc.SelectObject(oldBrush);
    }

    {
        CBrush brush(RGB(255,255,255)); 
        CBrush *oldBrush = dc.SelectObject(&brush); 
        dc.Rectangle(x,(50+y),x+200,(y+100)); 
        CPen pen2(PS_SOLID, 1,RGB(0,0,255)); 
        CPen *oldPen = dc.SelectObject(&pen2); 
        dc.Ellipse(x+75,y+50,x+125,y+100); 

        // Draw spokes
        int nOriginX = x+100;
        int nOriginY = y+75;
        int nRadius = 25;
        int nSpokes = 24;
        double fAngle = 2*PI/nSpokes;

        for (int i =0; i<nSpokes; i++)
        {
            dc.MoveTo(nOriginX,nOriginY);
            int nX = (int)ceil(cos((fAngle)*i)*(nRadius)+nOriginX);
            int nY = (int)ceil(sin((fAngle)*i)*(nRadius)+nOriginY);
            dc.LineTo(nX,nY);
        }
        dc.SelectObject(oldPen);

    }

    {
        CBrush brush(RGB(34,139,34)); 
        CBrush *oldBrush = dc.SelectObject(&brush); 
        dc.Rectangle(x,(100+y),x+200,(150+y)); 
        dc.SelectObject(oldBrush);
    }

    dc.SelectObject(oldPen);
}
于 2012-08-06T02:27:42.030 に答える
0

私はあなたが使用しているAPIに精通していませんが、あなたはそうすることができます。

于 2012-08-03T07:35:12.387 に答える
0

CDC::LineToあなたが求めているのは方法だと思います(CDC::MoveTo開始点に到達するために使用できます)。より詳しい情報:

"現在の位置からxとyで指定された点(または点)まで線を引きます...線は選択したペンで描画されます。現在の位置はx、yまたは点に設定されます。」

于 2012-08-03T09:07:17.037 に答える