본문 바로가기

Subject/Programming

WinAPI] First 예제 해석(Window 클래스, CreateWindow, ShowWindow)

0. 헤더파일


#include <windows.h>


 -윈도우즈 프로그래밍에 필요한 대부분의 리소스를 가지고 있다.




1.  WinMain


int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR IpszCmdParam, int nCmdShow)


 APIENTRY: _stdcall을 사용 //중요하지는 않음


-인자

 hInstance: 프로그램의 인스턴스 핸들 

                (대부분 API 함수의 인자로 요구되기 때문에, 

                  HINSTANCE g_hInst; 전역변수에 저장해둠)


 hPrevInstance: 16비트와의 호환성을 위해 존재 // 중요하지 않음

 lpszCmdParam: argv 인수와 동일(파일명은 전달되지 않음)

 nCmdShow: 해당 프로그램의 창 설정값이 전달(최소화/기본/최대화 등)

ex) 기본일 경우 SW_SHOWNORMAL

    최소화일 경우 SW_SHOWMINIMIZED

    >> 더 많은 인자의 종류를 확인하고 싶으면

        MSDN::ShowWindow




2. WndProc


 -윈도우즈 프로그래밍에서는 WinMain과 WndProc이 모두 필요.

 -WinMain은 화면에 윈도우를 표시하기만 할 뿐, 실질적 일처리는 WndProc에서 이뤄짐.

 -CALLBACK: APIENTRY와 마찬가지로 _stdcall을 나타내는 매크로

                (WINAPI 매크로도 동일)

                 >Win32(_stdcall 사용)이 아닌 시스템에서의 이식성을 위해 삽입. 

>상세한 의미는 아직 알 필요없음.


 


3. TEXT("First")


 -문자속성 변환 매크로

 -유니코드 컴파일시 유니코드 문자 반환

  아닐 경우, 8비트의 ANSI




4.윈도우 구조체(WNDCLASS WndClass)


 -윈도우 창을 만드려면, 윈도우 클래스를 등록(regist)한 후 CreateWindow함수를 호출해야 함.

 -만들어질 윈도우의 여러가지 특성을 정의.

 -상세 멤버 설명

  style: 윈도우 스타일 지정

  lpfnWndProc: 메시지처리 함수 지정(윈도우에서 메시지가 발생할 때마다, 해당 함수 호출)

  cbClsExtra, cbWndExtra: 예약공간, 일반적으로 0. //설명 부실.

  hInstance: 윈도우 클래스를 등록하려는 프로그램 번호, WinMain의 인자값 그대로 대입.

  hIcon, hCursor:  아이콘, 커서 지정. Load~함수의 반환값을 이용.

                        >예제에서는 디폴트값 사용.

  hbrBackground: 윈도우 배경 색상 지정.

  lpszMenuName: 프로그램이 사용할 메뉴 지정.

  lpszClassName: 윈도우 클래스 이름 지정.


 -윈도우 구조체 등록: 운영체제가 기억.

  >RegisterClass(&WndClass)




5. CreateWindow 특이 인자 간단 설명


 hWndParent: 부모 윈도우가 있을 경우, 부모 윈도우의 핸들 지정.

                   없을 경우(최상위 윈도우), NULL 입력. 

                    -> 데스크탑을 부모로 가져 바탕화면 어디나 돌아다닐 수 있는 윈도우가 됨.

 hmenu: 사용할 메뉴 핸들 지정

 hinst: 윈도우의 주체인 프로그램 핸들(WinMain 인스턴스 인자)을 지정.

        프로그램이 종료될 때 운영체제가 남은 윈도우를 자동 파괴.


 ->CreateWindow만으론 윈도우창이 나타나지 않음.

   메모리상에 윈도우에 대한 정보만 기록될 뿐.




6. ShowWindow


 BOOL WINDAPI ShowWIndow(HWND hWnd, int nCmdShow)


 hWnd: CreateWindow가 반환한 윈도우 핸들값 전달.

 nCmdShow: WinMain의 인자(미리 설정된 값) 전달.

'Subject > Programming' 카테고리의 다른 글

JAVA] JFrame - 0) 설명  (0) 2016.12.10
WinAPI] First 예제 해석(메시지 처리 루프)  (0) 2016.12.08
WinAPI] First 예제  (0) 2016.12.06
WinAPI  (0) 2016.12.06
C] 뮤텍스(Mutex), 크리티컬 섹션(Critical Section)  (0) 2016.12.01