2004. 4. 25. 09:01

윈도우 분석 4. 간단한 프로그램 작성

####################################################
   윈도우 분석

             4. 간단한 프로그램 작성

####################################################



  #include <windows.h>

  LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
  int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine, int iCmdShow)
  {
      static TCHAR szAppName[] = TEXT('Hello Windows');
      HWND hwnd;
      MSG msg;
      WNDCLASS wndClass;
              
        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)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, iCmdShow);
     while(GetMessage(&Message,NULL,0,0))
     {  
          TranslateMessage(&Message);  
          DispatchMessage(&Message);  
     }
     return Message.wParam;  
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
                                   WPARAM wParam, LPARAM lParam)
{
     HDC hdc;
     PAINTSTRUCT ps;
     RECT  rect;
  
     switch(message)
     {
        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            GetClientRect(hwnd, &rect);

            DrawText(hdc, TEXT("Hellow Windows"), -1, &rect,
                       DT_SINGLELINE | DT_CENTER | DT_WCENTER);
            EndPaint(hwnd, &ps);
            return 0;

        case WM_DESTROY:
           PostQuitMessage(0);
           retrun 0;
      }
      return DefWindowProc(hwnd, message, wParam, lParam);
}

      
간단한 예제에서 쓰인 Windows 함수호출 열거

   LoadIcon  - 프로그램에 의해 사용되는 아이콘을 로드한다
   LoadCursor - 프로그램에 의해 사용되는 마우스 커서를 로드한다
   GetStockObject - 그래픽개체를 알아내고 이 경우 윈도우의 배경을 칠하는데 사용되는 브러쉬이다
   RegisterClass  - 윈도우클래스를 등록한다
   MessageBox   - 메세지 상자를 출력한다
   CreateWindow  - 윈도우 클래스를 기반으로 윈도우를 생성한다
   ShowWindow   - 화면상에 윈도우를 출력한다
   GetMessage   - 메세지큐로부터 메세지를 알아낸다
   TranslateMessage - 키보드메세지를 번역한다
   DispatchMessage - 윈도우 프로시저에 메세지를 보낸다
   BeginPaint   - 윈도우에서 그리기 작업을 시작시킨다
   GetClientRect - 윈도우의 클라이언트 영역의 크기를 알아낸다
   DrawText  - 문자열을 출력한다
   EndPaint  - 그리기작업을  끝낸다
   PostQuitMessage -  메세지큐에 quit 메세지를 삽입한다
   DefWindowProc  - 메세지의 디폴트 처리를 수행한다