API 1장 기본 !
기본 API 메인 함수 주석
#include <Windows.h>
// 함수 선언 부
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst; //많은 함수들이 hInstance 값을 요구함, 그래서 이 값을 g_hInst 에 대입해놈.
LPCTSTR lpszClass=TEXT("First"); // 클래스 정의 , 타이틀 바 에 표현되기도 함
// WinMain 함수
// HINSTANCE hInstance = > 인스턴스 핸들, 프로그램 자체를 일컫는 정수값,
//HINSTANCE hPrevlnstance => null 이라 생각하면 됨 찌꺼기
//LPSTR lpszCmdParam => ARGV 인수와 같음 실행직후 열 파일의 경로가 설정 됨,
// int nCmdShow = > 프로그램이 실행될 형태 이며, 최소화 , 보통 모양 등이 전달됨
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevlnstance,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;//많은 함수들이 hInstance 값을 요구함, 그래서 이 값을 g_hInst 에 대입해놈.
WndClass.cbClsExtra=0; //내부 예약어
WndClass.cbWndExtra=0; //내부 예약어
WndClass.hbrBackground=CreateHatchBrush(HS_DIAGCROSS,RGB(233,44,44)); // 윈도우 배경색
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); //커서
WndClass.hIcon=LoadIcon(NULL,IDI_ERROR); // 아이콘
WndClass.hInstance=hInstance; //프로그램 등록
WndClass.lpfnWndProc=WndProc; // 윈도우 메시지 처리함수 지정
WndClass.lpszClassName=lpszClass; // 윈도우 클래스의 이름 정의 CreateWindow 호출 할때 이 이름 씀
WndClass.lpszMenuName=NULL; // 메뉴를 지정함
WndClass.style=CS_HREDRAW | CS_VREDRAW; // 스타일 정의, 어떠한 형태를 가질것인가 정의, 현재는 크기가 변할경우 다시그린다 임
RegisterClass(&WndClass); //위에 다 정의한 후, 윈도우 클래스 등록 하는것.
hWnd=CreateWindow(lpszClass,TEXT("나의 첫번째 습작 "),WS_OVERLAPPEDWINDOW,100,100,1000,800,NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow); //만든윈도우 보여랏
// lpszClass : 생성하고자 하는 윈도우 클래스를 지정,
// 그다음놈 : 타이틀바에 나타날 문자열
//WS_OVERLAPPEDWINDOW : dwStyle , 윈도우의 형태를 지정하는 인수
// cw_usedfault : x y , wid , height
//NULL 지정된놈 : hWndParent , 즉 부모가 있을 경우, 부모 윈도우의 핸들을 지정, 부모가없으면 null 로 자신이 최상위
//hmenu = 메뉴의 핸들을 지정, 원래 그대로 사용하려면 인수를 null 로 다른 메뉴 쓸려면 원하는 메뉴 핸들 지정
//hinst : 프로그램의 주체. 즉 프로그램의 핸들을 지정한다
while(GetMessage(&Message,NULL,0,0)){
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (INT_PTR)Message.wParam;
}
// 아래놈은, WinMain 과 쌍벽을 이룸, 필수 프로그램의 실질적이고 고유한 처리를 하는 곳임
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) // CALLBACK 매크로 _stdcall로 정의
{
switch(iMessage){
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}