2009. 9. 21. 15:28 카테고리 없음

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                             PSTR szCmdLine, int CmdShow)

WINAPI => __stdcall (파스칼 형식)
크게 2가지 호출규약: C의 함수호출은 호출한 놈이 스택 정리
                              PASCAL함수호출은 호출당한 놈이 자기 스택정리하고 나감.
->그래서 API함수에서는 C스택이 호출하는 함수는 다 WINAPI다.

파일 올라가는 위치가 00400000   ( hInstance )  이 위에 코드, 전역공간 주르륵
void*로 쓰지 않고 HINSTANCE로 쓰는 이유.. 
(나중에 코드볼때 Bitmap인지, 프로그램 시작인지 확인 어렵다.
 그래서 알기 쉽게 각각 typedef로 변환해놓음)
 
hPrevInstance는 무조건 0(NULL)  : win 3.1에만 해당
  => 예전엔 메모장(동일프로그램) 2개 띄우면 첫번째 띄운놈의 주소가 들어갔는데, 
     이 시절엔 4G의 가상메모리에 여러개의 프로세스가 왔다.
     요즘은 4G의 가상메모리에 한프로그램밖에 안뜬다.

szCmdLine ( C의 argv[]같은 역할 )

CmdShow ( 프로그램 실행될때 최소화 최대화 노멀등의 크기로 시작되는데 이 값,
exe파일 우측버튼 속성에서 실행란 확인(기본창, 최대화, 최소화) ).

windows.h는 마스터 헤더파일.
(여러가지를 인클루드한 인클루드 파일 ㅎㅎ)
-WINDEF.H       : 기본형식 정의(HINSTANCE같이 typedef한 애들등)
-WINNT.H        : 유니코드 지원을 위한 형식 정의 
-WINBASE.H     : 커널 함수들에 대한 함수 원형
-WINGDI.H        : 그래픽 장치 인터페이스 함수

윈도우 프로그램은 기본적으로 정지 상태.
=> 마우스나 키보드의 입력(이벤트) 발생시에 시스템이 해당 프로그램에 이를 알려줌.
=> 어떤 방식으로 알려주나 (spy++등으로 참고 )
  #define WM_MOUSEMOVE 0x200  
시스템은 우리 프로그램에 200번 발생~ 이렇게 메세지 구조체를 통해 알려줌.

메세지는 구조체
typedef struct tagMSG
{
HWND        hwnd;
UINT          message;
WPARAM    wParam;
LPARAM     lParam;
DWORD       time;
POINT         pt;
}MSG;
posted by 부풍