posted by nsakura 2010. 7. 16. 16:37

그래픽 출력

그래픽 출력도 문자열 출력과 같은 방법과 다르지 않다.

몇가지 그래픽 출력 함수를 소개 하겠다.

COLORREF SetPixel(hdc,nXPos,nYPos,clrref)
DWORD MoveTOEx(hdc,x,y,lpPoint);
BOOL LineTo(hdc,x,y,lpPoint);
BOOL Rectangle(hdc,nLeftRect,nTopRect,nRightRect,nBoottomRect);
BOOL Ellipse(hdc,nLeftRect,nTopRect,nRightRect,nBoottomRect);

SetPixel함수는 화면에 점을 출력 한다. 2 3번째 인자는 좌표 clrref는 색상을 지정한다.

선을 그을 때는 MoveToEx함수와 LineTo 함수를 같이 사용해야한다.

MoveToEx함수로 시각점을 찍는다.

LineTo함수로 끝점까지 선을 긋는다.

Rectangle은 사각형을 그리는데. 전 예제의 사각형을 이용해 문장을 출력하는데... 그것과 같은 이치다.

Ellipse도 Rectangle과 같다 단지 원을 그릴뿐.







#include <windows.h>

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE g_Inst;

LPCTSTR lpszClass=TEXT("GFP GraphOut");

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){
 HWND hWnd;
 MSG Message;
 WNDCLASS WndClass;
 g_Inst=hInstance;

 WndClass.cbClsExtra=0;
 WndClass.cbWndExtra=0;
 WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
 WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
 WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
 WndClass.hInstance=hInstance;
 WndClass.lpfnWndProc=WndProc;
 WndClass.lpszClassName=lpszClass;
 WndClass.lpszMenuName=NULL;
 WndClass.style=CS_HREDRAW|CS_VREDRAW;
 RegisterClass(&WndClass);

 hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,(HMENU)NULL,hInstance,NULL);

 ShowWindow(hWnd,nShowCmd);

 while(GetMessage(&Message,NULL,0,0)){
  TranslateMessage(&Message);
  DispatchMessage(&Message);
 }

 return (int)Message.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam){
 HDC hdc;
 PAINTSTRUCT ps;

 switch(iMessage){
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 case WM_PAINT:
  hdc=BeginPaint(hWnd,&ps);
  SetPixel(hdc,10,10,RGB(255,0,0)); //10 10좌표에 붉은점 찍는다
  MoveToEx(hdc,50,50,NULL); //좌표를 50 50으로 이동
  LineTo(hdc,300,90); //현 자표에서 (50 50) 300 90까지 선을 그어라
  Rectangle(hdc,50,100,200,180); //50 100좌표를 기준점으로 200 180을 끝점으로 하는 사각형을 그린다
  Ellipse(hdc,200,100,400,200); //위와 같다 하지만 원을 그릴뿐

  EndPaint(hWnd,&ps);
  return 0;
 }

 return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}

결과는 다음과 같습니다. 빨간점은 잘

'Computer > Win API' 카테고리의 다른 글

WinApi input WM_CHAR  (0) 2010.07.17
WinApi MessageBox  (0) 2010.07.17
WinApi DrawText  (0) 2010.07.15
WinApi DC 예제  (0) 2010.07.15
WinApi 예제1의 확장  (0) 2010.07.15