1. 윈도우 프로그래밍의 개념

-  개념 : 사용자가 발생시키는 이벤트에 대한 메시지를 처리하는 것
 
- WinMain 함수
 함수원형과 초기화 내용 

Int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpszCmdLine, int nCmdShow)

{

윈도우 클래스 생성
윈도우 클래스 등록
프레임 윈도우 생성
프레임 윈도우 화면에 표시
메시지 큐로부터 메시지를 받아 해당 프로시저로 보냄
                   } 
- Procedure
 윈도우는 Message Driven 방식
 메시지를 처리하는 함수를 procedure라 한다
 보통 함수명 다음에 Proc가 붙으면 프로시저로 보면된다
 프로시저는 여러개가 될수 있다

- WinProc 함수
윈도우에서 들어온 메시지를 switch 문을 이용하여 처리하는 루틴이다
§수원형과 메시지 처리 형태

LRESULT CALLBACK WinProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

{

Switch(iMsg)

{

     해당 메시지에 대한 처리

}

}




* 간단한 Win32 SDK 프로그램 만들기








1 - WIN32 SDK 프로젝트 만들기
2 - 프로젝트에 소스 파일 삽입
3 - 추가한 파일에 소스코드 입력
4 - 프로그램 실행


- 프로그램 분석

Windows.h 파일
 - 이 파일은 윈도우 애플리케이션을 작성하는데 필요한 매크로, 각종 API함수 ,메시지등이 선언된 헤더파일이다

WinMain() 함수
 - 운영체제에 윈도우를 생성하고 등록한다
 - 메모리에 프레임 윈도우를 생성하고 속성을 초기화하여 화면에 표시될수 있도록 한다
 - 메시지 루프를 생성하여 해당 윈도우에 대한 메시지를 메시지 큐로부터 받아와 메시지를 해당 윈도우 프로시저로 보낸다

윈도우 클래스를생성한다.

WNDCLASS  WndClass; 

<!--[if ppt]-->§<!--[endif]-->

WndClass.style   =CS_HREDRAW | CS_VREDRAW

WndClass.lpfnWndProc  =WndProc; 

WndClass.cbClsExtra= 0; 

WndClass.cbWndExtra  =0 

WndClass.hInstance   =hInstance; 

WndClass.hIcon  =LoadIcon(NULL, IDI_APPLICATION

WndClass.hCursor   =LoadCursor(NULL, IDC_ARROW);

WndClass.hbrBackground  =GetStockObject(WHITE_BRUSH

WndClass.lpszMenuName  =NULL; 

                       WndClass.lpszClassName = szAppName;

            
윈도우 클래스를 등록한다.

 RegisterClass(&WndClass);
 

프레임 윈도우를 생성한다.

 hwnd = CreateWindow(  // 윈도우 생성 함수

  szAppName,  szTitleName,  // 타이틀 바에 출력될 문자열

  WS_OVERLAPPEDWINDOW,// 윈도우 스타일

  CW_USEDEFAULT,  // 윈도우 좌측 상단의 x좌표

  CW_USEDEFAULT,  // 윈도우 좌측 상단의 y좌표

  CW_USEDEFAULT,  // 윈도우의 너비

  CW_USEDEFAULT,  // 윈도우의 높이

  NULL,  // 부모 윈도우의 핸들

  NULL,  // 메뉴 또는 자식 윈도우의 핸들

  hInstance,  // 애플리케이션 인스턴스 핸들

  NULL  // 윈도우 생성 데이터의 주소

   );

프레임 윈도우를화면에 표시한다.

ShowWindow(hwnd, nCmdShow);

UpdateWindow(hwnd);


  

메시지를 처리한다.

while(GetMessage(&msg, NULL, 0, 0))

{  

      // 가상 키 메시지를 문자 메시지로 변환한다.

     TranslateMessage(&msg);

      // 메시지를 해당 윈도우 프로시저로 보낸다.

    DispatchMessage(&msg); 

                         }

    윈도우에 텍스트 출력하기

  TextOut() 함수
  - 기본적인 텍스트 출력
§함수의 원형

BOOL TextOut(

   HDC   hdc,  // 디바이스 컨텍스 핸들 

   int       nXStart,  // 문자 출력 시작점 X 좌표

   int       nYStart,  // 문자 출력 시작점 Y 좌표

   LPCTSTR    lpString,  // 출력할 문자열

   int       cbString  // 문자열의 길이
);
 

 

   DrawText() 함수
   - 문자를 출력할때 어느 영역을 정하고 이 영역에 출력하는 함수 

       
         
§함수의 원형

Int DrawText(

   HDC  hdc,  // 디바이스 컨텍스 핸들

   LPCSTR  lpString,  // 출력할 문자

   int   nLength,  // 출력할 문자의 수

   LPRECT  lpRect,  // 출력할 영역

   UINT  Flags  // 출력 형식 플러그

);




출력형식 플러그


             

- MSG 구조체
 메시지큐에 저장되는 정보를 담고 있는 구조체

§메시지 큐에 저장되는 정보를 담고 있는 구조체   

  typedef struct tagMSG {

            HWND   hwnd;

            UINT   message;

            WPARAM wParam;

            LPARAM lParam;

            DWORD  time;

            POINT  pt;

  } MSG;
 

- WindowClass 구조체
§윈도우 속성에 대한 정보를 포함하는 구조체

         typedef struct _WNDCLASS  {

   UINT              style;      // 윈도우의 스타일을 지정한다.

   WNDPROC  lpfnWndProc;  // 윈도우 프로시저에 대한 포인터를 지정한다.

   int              cbClsExtra;

   int              cbWndExtra;

   HANDLE     hInstance;     // 프로그램 자체에 대한 핸들을 지정한다.

   HICON        hIcon;                // 윈도우에서 사용될 아이콘에 대한 핸들을 지정

   HCURSOR hCursor;     // 윈도우에서 사용할 커서에 대한 핸들을 지정

   HBRUSH    hbrBackground; // 윈도우의 백그라운드 브러시에 대한 핸들 지정

   LPCTSTR   lpszMenuName; // 윈도우에서 메뉴의 이름을 지정하며,

                                     // 리소스에서 사용된다.

   LPCTSTR   lpszClassName; // 윈도우 클래스의 이름을 명시한다

} WNDCLASS; 



-RECT 구조체  
  사각형 형태의 좌표를 지정하는 구조체  
                                   

typedef struct tagRECT {

    LONG left;    // 맨 왼쪽의 좌표를 명시한다.

    LONG top;    // 맨 위쪽의 좌표를 명시한다.

    LONG right;      // 맨 오른쪽의 좌표를 명시한다.

    LONG bottom;    // 맨 아래쪽의 좌표를 명시한다.

} RECT;                                                                            

Posted by 코딩하는 야구쟁이
,