2012년4월9일_준구햄이 가르켜 달라는 그래프를 그리는 프로그램


목표는 ‘Ctrl + Shift + Esc’키를 눌렀을 때 나오는 windows작업관리자의 성능탭의 CPU점유율 그래프이다.
처리절차는 다음과 같다.
1. 주기적인 신호발생. (함수)
2. 배열의 시작부분에 저장.
3. 배열의 값을 크기에 따라 선의 길이를 달리해 그리기 (1차원)
4. 배열을 한 칸씩 시프트
5. 1번으로

급조한 프로그램이라 속도는 신경쓰지 않았다.

win32 API기본형에서 아래의 내용을 추가하면 된다.
1. WM_CREATE 메시지 처리부분

   1: switch (message)
   2: {
   3: case WM_CREATE:
   4:     SetTimer(hWnd, 1, 50, NULL);
   5:     break;

2. WM_TIMER 메시지 처리부분

   1: case WM_TIMER:
   2:     switch(wParam)
   3:     {
   4:     case 1:
   5:         // 1단계 랜덤생성
   6:         y = rand() % 100;    // 0 ~ 99
   7:         //y = sin(2 * 3.14 / 180 * angle) * 100;
   8:         //angle = angle + 1;
   9:         data[0] = y;
  10:  
  11:         InvalidateRect(hWnd, NULL, TRUE);
  12:         break;


3. WM_PAINT 메시지 처리부분

   1: case WM_PAINT:
   2:     hdc = BeginPaint(hWnd, &ps);
   3:     // TODO: 여기에 그리기 코드를 추가합니다.
   4:     MyPen=CreatePen(PS_SOLID, 1, RGB(0,0,255));
   5:     OldPen=(HPEN)SelectObject(hdc, MyPen);
   6:  
   7:     // 2단계 그리기
   8:     for(i = 199 ; i >= 0 ; --i)
   9:     {
  10:          
  11:         MoveToEx(hdc, i, 100, NULL);
  12:         LineTo(hdc, i, 100 - data[199 - i]); 
  13:         //SetPixel(hdc, i, 100 - data[199 - i], RGB(255,0,0));
  14:     }
  15:     // 3단계 시프트
  16:     for(i = 200 - 2 ; i >= 0 ; --i)
  17:     {
  18:         data[i + 1] = data[i];
  19:     }
  20:     break;


<실행결과>

image  ramdom



★ WM_TIMER 메시지의 수정

   1: case WM_TIMER:
   2:     switch(wParam)
   3:     {
   4:     case 1:
   5:         // 1단계 랜덤생성
   6:         //y = rand() % 100;    // 0 ~ 99
   7:         y = sin(2 * 3.14 / 180 * angle) * 100;
   8:         angle = angle + 1;
   9:         data[0] = y;
  10:  
  11:         InvalidateRect(hWnd, NULL, TRUE);
  12:         break;



image  sine wave (fill)


★ WM_PAINT 메시지의 수정

   1: case WM_PAINT:
   2:     hdc = BeginPaint(hWnd, &ps);
   3:     // TODO: 여기에 그리기 코드를 추가합니다.
   4:     MyPen=CreatePen(PS_SOLID, 1, RGB(0,0,255));
   5:     OldPen=(HPEN)SelectObject(hdc, MyPen);
   6:  
   7:     // 2단계 그리기
   8:     for(i = 199 ; i >= 0 ; --i)
   9:     {
  10:          
  11:         //MoveToEx(hdc, i, 100, NULL);
  12:         //LineTo(hdc, i, 100 - data[199 - i]); 
  13:         SetPixel(hdc, i, 100 - data[199 - i], RGB(255,0,0));
  14:     }

image sine wave


그래프 그리는게 뭐가 신기한지 –_-; 복습하는 차원에서 해봤당..
준구햄은 프로그래밍이 취미가 아니신듯;;