기록은 기억을 이기고 시간보다 오래 남는다.

프로그래밍 언어/c++

[C/C++] c언어로 원 그리는 프로그램/GetWindowDC(GetForegroundWindow());

준_준 2022. 4. 29. 23:59

헤더 파일과 cpp 파일 두개로 나누었습니다.

원을 그리기 위해서는 아래와 같은 함수가 필요합니다.

 

HDC hdc = GetWindowDC(GetForegroundWindow()); 

Ellipse(hdc, x의    시작, y이   시작, x의   끝, y의   끝);

위 함수들은 #include<windows.h> 헤더 파일에 정리 되어있어 미리 선언이 필요합니다.

 

헤더파일 입니다. circle 구조체를 선언하였습니다.

cpp 파일 입니다. 헤더에서 선언했던 구조체 함수들 입니다.

 

main 파일 입니다.

 

주석 1번은 x, y값과 반지름을 입력하면 해당 위치에 원을 그려줍니다.

주석 2번은 랜덤으로 10개의 원을 그립니다.

주석 3번은 원을 몇개 그릴지 입력 받고 랜덤으로 입력받은 수 만큼 그립니다.

 

아래느 소스입니다.

#pragma once
class CCircle
{
private:
int m_x;
int m_y;
int m_radius;
public:
CCircle(int x, int y, int r);
CCircle();

void draw();
void generate();
void calcArea();
~CCircle();

};

CCircle::CCircle(int x, int y, int r)
{
this->m_x = x;
this->m_y = y;
this->m_radius = r;
}
CCircle::CCircle()
: m_x(0), m_y(0), m_radius(0)
{
}
CCircle::~CCircle()
{
}
void CCircle::draw()
{
HDC hdc = GetWindowDC(GetForegroundWindow());
Ellipse(hdc, this->m_x-this->m_radius, this->m_y - this->m_radius, this->m_x + this->m_radius, this->m_y + this->m_radius);
}
void CCircle::generate()
{
int minX = 100; //x좌표 최소값
int minY = 100; //y좌표 최솟값
int minR = 10;  //minimum value of radius
srand((unsigned)time(NULL));
minX += (rand() % 900)+1;
minY += (rand() % 300)+1;
minR += (rand() % 100)+1;
CCircle random(minX, minY, minR);

random.draw();
Sleep(1000);
}
void CCircle::calcArea()
{
int minX = 100; //x좌표 최소값
int minY = 100; //y좌표 최솟값
int minR = 50;  //minimum value of radius
srand((unsigned)time(NULL));
minX += (rand() % 800) + 1;
minY += (rand() % 300) + 1;
minR += (rand() % 100) + 1;
CCircle random(minX, minY, minR);
cout << "Circle Area: " << 3.14 * (minR * minR) << endl;
random.draw();
}

#include<windows.h>
#include <iostream>
#include "circle.h"
using namespace std;

int main()
{//1번
int inputX, inputY, inputR; 

cout << "Enter x pos : ";
cin >> inputX;
cout << "Enter y pos : ";
cin >> inputY;
cout << "Enter radius : ";
cin >> inputR;

CCircle circle1(inputX, inputY, inputR);
circle1.draw();
Sleep(2500);
//2번
for (int i = 0; i < 10; i++)
{
CCircle circle2;
circle2.generate();
}
//3번
int NumOfCircle = 0;
while (NumOfCircle <= 0 || 100 < NumOfCircle)
{
cout << "Enter num of circles: ";
cin >> NumOfCircle;

if (NumOfCircle < 0 || 100 < NumOfCircle)
{
cout << "Pleas input 1 to 100! Try again" << endl;
}
}

for (int i = 0; i < NumOfCircle; i++)
{
CCircle* newCircle = new CCircle();
newCircle->calcArea();
delete newCircle;
Sleep(1000);
}

return 0;
}

반응형