vc++ mfc를 이용한 그래프 그리기 질문입니다.
하람
레포트로 mfc를 이용해서 3d그래프를 그려야 되는데요. 일단 그리긴 했는데 문제가 있네요.
제가 mfc초보라 잘 모르겠습니다 ㅠㅠ
위에 그림은 제가 구현한 3d그래프 함수입니다.
보시는바와 같이 for문을 이용해서 루프를 돌렸는데 숫자가 100으로 계속 나옵니다.
50단위로 350 300 250 200 이런식으로 줄어들게 하고싶은데 소스를 어떻게 고쳐야되나여?
이 소스는 아래 소스에 void CMy2D그래프View::Drawnumber(CDC *pDC) 함수에 있구요.
그리고 Crect와 배열을 이용해서 바 그래프 모양을 구현할려고 하는데 for 문을 이용해서 루프를 돌리면 같은 모양만 나오고 변경이 안되네요. for문을 이용해서 모양을 변경하면서 루프를 돌릴수있는 소스 좀 말씀해주세요.
2D 그래프View.h 헤더파일에 함수
public:
void Drawgraph(CDC *pDC); // 그리프를 그리는 함수
void Drawline(CDC *pDC); // 눈금과 선을 그리는 함수
void DrawAxes(CDC *pDC); // x축과 y축을 그리는 함수
void Drawnumber(CDC *pDC); // 눈금값을 표현하기 위한 함수
void Create(const CWnd * const parent,CRect * rect);
int i; // 변수선언
int j;
int k;
2D 그래프.View.cpp
void CMy2D그래프View::DrawAxes(CDC *pDC)
{
pDC-MoveTo(50,400); // x축 긋기
pDC-LineTo(450,400);
pDC-MoveTo(50,50); // y축 긋기
pDC-LineTo(50,400);
pDC-MoveTo(80,380); //y축1(3차원)
pDC-LineTo(80,30);
pDC-MoveTo(80,30); //y축2(3차원)
pDC-LineTo(480,30);
pDC-MoveTo(480,30); //x축1(3차원)
pDC-LineTo(480,380);
pDC-MoveTo(80,380); //x축2(3차원)
pDC-LineTo(480,380);
}
void CMy2D그래프View::Drawline(CDC *pDC)
{
// 가로 눈금선
int nStepY = 50; // 수직방향 간격
for(int i = 1; i 8; i++) {
pDC-MoveTo(40, i * nStepY);
pDC-LineTo(50, i * nStepY);
}
// 3차원 세로 대각선
int nStepY1 = 50; // 수직방향 간격
for(int j= 1; j 9; j++) {
pDC-MoveTo(50, j * nStepY1);
pDC-LineTo(80, j * nStepY1 - 20);
}
// 3차원 가로 대각선
int nStepY2 = 50;
for(int k= 1; k 10; k++) {
pDC-MoveTo(k * nStepY2, 400 );
pDC-LineTo(k * nStepY2 + 30, 380 );
}
}
void CMy2D그래프View::Drawnumber(CDC *pDC)
{
// 눈금의 값
CString temp;
int x=50;
int nStepY=50;
for(int i = 1; i 8; i++) {
for(int j = 8; j 1; j--) {
temp.Format(_T(%d), j*x);
pDC-TextOut(10,i*nStepY, temp);
}
}
}
void CMy2D그래프View::Drawgraph(CDC *pDC)
{
// 그래프
CBrush *myBrush;
CRect r(100, 300, 150, 400 );
COLORREF color[4] = {
RGB(0,0,0),
RGB(255,0,0),
RGB(0,255,0),
RGB(0,0,255),
};
for(i=0;i4;i++) {
myBrush = new CBrush(color[i]);
pDC-FillRect(r,myBrush);
r.OffsetRect(50,0);
delete myBrush;
}
CClientDC dc(this);
CPoint point[5];
point[0].x = 100;
point[0].y = 300;
point[1].x = 130;
point[1].y = 280;
point[2].x = 180;
point[2].y = 280;
point[3].x = 150;
point[3].y = 300;
point[4].x = 100;
point[4].y = 300;
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));
CRgn rgn2, rgn;
rgn2.CreatePolygonRgn(point,5,WINDING);
rgn.CreateRectRgn(0,0,0,0);
rgn.CopyRgn(&rgn2);
rgn.OffsetRgn(0,0);
dc.FillRgn(&rgn,&brush);
rgn.OffsetRgn(50,0); // 클라이언트의 기준이 아니라 방금 그렸던 곳을 기준으로 이동된다
CBrush brush2;
brush2.CreateSolidBrush(RGB(255,0,0));
dc.FillRgn(&rgn,&brush2);
rgn.OffsetRgn(50,0);
CBrush brush3;
brush3.CreateSolidBrush(RGB(0,255,0));
dc.FillRgn(&rgn,&brush3);
rgn.OffsetRgn(50,0);
CBrush brush4;
brush4.CreateSolidBrush(RGB(0,0,255));
dc.FillRgn(&rgn,&brush4);
rgn.OffsetRgn(50,0);
CClientDC dc2(this);
CPoint point2[5];
point[0].x = 300;
point[0].y = 400;
point[1].x = 300;
point[1].y = 300;
point[2].x = 330;
point[2].y = 280;
point[3].x = 330;
point[3].y = 380;
point[4].x = 300;
point[4].y = 400;
CBrush brurush brush5;
brush5.CreateSolidBrush(RGB(0,0,255));
CRgn rgn3, rgn4;
rgn3.CreatePolygonRgn(point,5,WINDING);
rgn4.CreateRectRgn(0,0,0,0);
rgn.CopyRgn(&rgn3);
rgn.OffsetRgn(0,0);
dc.FillRgn(&rgn,&brush5);
}
void CMy2D그래프View::OnDraw(CDC* pDC)
{
CMy2D그래프Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
DrawAxes(pDC); // x, y축을 그린다
Drawline(pDC); // 눈금선과 대각선을 그린다
Drawnumber(pDC); // 눈금의 값을 적는다
Drawgraph(pDC); // 그래프를 그린다
}