728x90
반응형
#include <math.h>
#define BTN1 1000
#define BTN2 ((BTN1)+1)
HWND hwndButton1;
HWND hwndButton2;
#define _PI 3.141592f
int Count = 0;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE: //윈도우 생성시 발생되는 message
{
Count = 0;
// HWND hwndButton1 전역변수화
hwndButton1 =
CreateWindowW(TEXT("BUTTON"), TEXT("회전"), //캡션
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
10, 10, 50, 30,
hWnd, (HMENU)1000, hInst, NULL);
//HWND hwndButton2 전역변수화
hwndButton2 =
CreateWindowW(TEXT("BUTTON"), TEXT("정지"), //캡션
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
10, 60, 50, 40,
hWnd, (HMENU)2000, hInst, NULL);
//많은 버튼생성시 반복문 사용가능, TEXT, 좌표, ID등을 배열에 저장하여 사용가능
}break;
case WM_TIMER:
{
switch (wParam)
{
case 99:
{
RECT rc = { 100, 200, 300, 400 };
InvalidateRect(hWnd, NULL, true);
//f5를 통해서 디버깅 시 출력창 출력
}
break;
case 88:
{
WCHAR str[32] = { 0, };
static int count = 0;
wsprintf(str, TEXT("timer2 개수%d \n"), count++);
OutputDebugString(str);
//f5를 통해서 디버깅 시 출력창 출력
}
break;
}
}
break;
case WM_COMMAND:
{
switch (wParam)
{
case 1000: //wParam==1000 - ID가 1000인 버튼1
{
HANDLE hTimer = (HANDLE)SetTimer(
hWnd,
99, //Timer ID
1000, //1000ms= 1s 한번 메세지 WM_TIMER 발생
NULL // 속성
);
HANDLE hTime1r1 = (HANDLE)SetTimer(hWnd, 99, 50, NULL);
//wParam ==99
HANDLE hTime1r2 = (HANDLE)SetTimer(hWnd, 88, 700, NULL);
//wParam ==88
}
break;
case 2000: //wParam==2000 - ID가 2000인 버튼2
{
KillTimer(hWnd, 99);// 핸들, ID
}
break;
}
}
break;
case WM_PAINT:
{
#define ANGULAR 5
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다...
RECT rc;
GetClientRect(hWnd, &rc);
int CenterclientX = rc.right / 2; // client 창의 x 중심
int CenterclientY = rc.bottom / 2; // client 창의 y 중심
// 오각형의 무게중심 좌표
int Radius = 100; // 정오각형에 외접하는 원의 반지름 정의 즉, 오각형의 크기를 지정
float angle = (2.0f * _PI) / ANGULAR; // 무게중심을 기준으로 각의 크기 마다 변하는 각도 라디안 계산 ex) 정오각형 : 72도
int StartDrawX = CenterclientX + sinf(Count) * Radius;
int StartDrawY = CenterclientY + cosf(Count) * Radius; // 정오각형 아래 꼭지점을 시작으로 정의
MoveToEx(hdc, StartDrawX, StartDrawY, NULL); // 정오각형 시작점
int pointX, pointY; // 각 꼭지점들의 좌표를 변수로 선언
for (int i = 0; i < ANGULAR; i++) // 각의 개수만큼 반복
{
pointX = CenterclientX + sinf(angle * (i + 1) + Count) * Radius; // angle의 값을 변화 시켜주면서 sinf를 통해 x 좌표
pointY = CenterclientY + cosf(angle * (i + 1) + Count) * Radius; // angle의 값을 변화 시켜주면서 cosf를 통해 y 좌표
LineTo(hdc, pointX, pointY); // 구한 꼭지점의 x,y좌표를 찍어 도형을 그림
}
Count += 30;;
EndPaint(hWnd, &ps);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
728x90
반응형
'Education > Edu | .net' 카테고리의 다른 글
# 2.7) [Win32API] 메세지 띄우는 법 (0) | 2021.01.04 |
---|---|
# 2.6) [Win32API] Polyline 사용하여 별 그리기 (0) | 2021.01.04 |
# 2.4) [Win32API] 오각형 그리기 (0) | 2020.12.31 |
# 2.3) [Win32API] 윈도우즈 데스크톱 애플리케이션 코드 설명(2) (0) | 2020.12.31 |
# 2.2) [Win32API] 윈도우즈 데스크톱 애플리케이션 코드 설명(1) (0) | 2020.12.31 |