내장형 하드웨어/WINAPI

WINAPI - 소스분석 첫번째

동화다아아 2011. 8. 22. 08:20

#include<windows.h>

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

// 
전역 변수 선언
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("First");

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
  HWND hWnd;
  MSG Message;
  WNDCLASS WndClass;
  g_hInst = hInstance; 

/* 윈도우 클래스를 등록하는 프로그램의 번호이며 WinMain 인수로 전달 hInstance값을 그대로 대입*/

  WndClass.cbClsExtra = 0// 
예약 영역사용하지 않을 경우는 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)
{
  switch(iMessage)
  {
  case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
  }
  return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}