본문 바로가기

API

TextOut 예제


#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hlnst;
LPCTSTR lpszClass = TEXT("TextOut");

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
  HWND hWnd;
  MSG Message;
  WNDCLASS WndClass;
  g_hlnst=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, nCmdShow);

  while(GetMessage(&Message, NULL, 00))
  {
    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_LBUTTONDOWN:
    hdc = GetDC(hWnd);
    TextOut(hdc, 100, 100, TEXT("Beautiful Korea"), 15);
    ReleaseDC(hWnd, hdc);
    return 0;*/

  case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    TextOut(hdc, 100100, TEXT("Beautiful Korea"), 15);
    EndPaint(hWnd, &ps);
    return 0;
  }
  return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}



DC(Device Context)의 필요성

윈도우즈는 세가지 동적 연결 라이브러리(DLL)로 구성되어 있다
- 메모리를 관리하고 프로그램을 실행시키는 KERNEL
- 유저 인터페이스와 윈도우를 관리하는 USER
- 화면처리와 그래픽을 담당하는 GDI

GDI(Graphic Device Interface)모듈에 특히 관심을 기울여야 하는데 이유는 화면으로 출력되는 모든 글자와 그림은 GDI를 통해야 하기 때문이다.

DC란 출력에 필요한 모든 정보를 가지는 데이터 구조체이며 GDI모듈에 의해 관리된다.

LineTo(hDC, X, Y)
선의 시작점과 색상, 굵기 따위의 정보는 모두 hDC에 들어 있으며 LineTo함수는 hDC와 끝점의 좌표만 인수로 전달받으면 된다. DC는 그리기에 필요한 다양한 정보들의 저장소 역할을 한다.


WM_PAINT메시지

윈도우즈는 가려졌던 윈도우의 화면을 보관 및 복구하는 책임을 지지 않으며 지워진 화면을 복구하는 책임은 전적으로 프로그램 자신에게 있다.

'API' 카테고리의 다른 글

컨트롤(버튼)  (0) 2011.09.19
폰트  (0) 2011.09.16
비트맵  (0) 2011.09.15
색, 브러시, 투명 오브젝트  (0) 2011.09.09
First 예제  (0) 2011.08.22