카테고리 없음
API 1
부풍
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;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}MSG;