반응형

// Visual Studio 2015, Hello world! API 예제  ( sualchi@daum.net )

// 비주얼스튜디오 2015에서 API 응용프로그램 프로젝트를 만드는 방법은 다른 분들의 글을 참고하세요.

// main.c 파일을 생성하고, 이 소스 코드를 모두 복사해서 빌드/실행하세요(F5).


#include <Windows.h>


const wchar_t className[] = L"HelloWin"; // 윈도우 클래스 이름
BOOL InitApp(HINSTANCE h);                   // 초기화 함수 원형 선언
LRESULT CALLBACK HelloWndProc(HWND, UINT, WPARAM, LPARAM);
BOOL InitInstance(HINSTANCE h, int nCmdShow);


// 메인 함수

int WINAPI wWinMain(HINSTANCE h, HINSTANCE hp, wchar_t * lpCmdLine, int nCmdShow)
{
  MSG msg;
  if (!InitApp(h))
    return FALSE;
  if (!InitInstance(h, nCmdShow))
    return FALSE;
  while (GetMessage(&msg, (HWND)NULL, 0, 0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return 0;
}


// 응용프로그램 초기화 및 등록 함수

BOOL InitApp(HINSTANCE h)
{
  WNDCLASSEX wcx;
  wcx.cbSize = sizeof(wcx);
  wcx.style = CS_HREDRAW | CS_VREDRAW;
  wcx.lpfnWndProc = HelloWndProc;
  wcx.cbClsExtra = 0;
  wcx.cbWndExtra = 0;
  wcx.hInstance = h;
  wcx.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  wcx.hCursor = LoadCursor(NULL, IDC_ARROW);
  wcx.hbrBackground = GetStockObject(WHITE_BRUSH);
  wcx.lpszMenuName = NULL;
  wcx.lpszClassName = (LPCTSTR)className;
  wcx.hIconSm = NULL;
  return RegisterClassEx(&wcx);
}


// 윈도우 프로시저 콜백 함수

LRESULT CALLBACK HelloWndProc(HWND hWnd, UINT message, WPARAM wp, LPARAM lp)
{
  const LPCWSTR text = L"Hello, Window! 안녕하세요!";
  switch (message)
  {
  case WM_PAINT:
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hWnd, &ps);
    TextOutW(hdc, 100, 100, text, (int)wcslen(text));
    EndPaint(hWnd, &ps);
    return 0;
  case WM_DESTROY:
    PostQuitMessage(0);
    return 0; 

  }
  return DefWindowProc(hWnd, message, wp, lp);
}


// 윈도우 인스턴스 초기화 함수

BOOL InitInstance(HINSTANCE h, int nCmdShow)
{
  HWND hwnd;
  hwnd = CreateWindow(
    (LPCWSTR)className,
    L"Hello Window",
    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    (HWND)NULL,
    (HMENU)NULL,
    h,
    (LPVOID)NULL);
  if (!hwnd)
    return FALSE;
  // ShowWindow(hwnd, SW_SHOW);    // WS_VISIBLE 속성을 지정 안한 경우에는 직접 호출 가능
  return TRUE;
}



반응형

+ Recent posts