먼 질문받는글 댓글이 800개가 넘노

일단 기본적인 배경으로 질문자는 C만 이수하고 윈도프로그래밍, C++안해보고 VC++을 파고있음.

질문내용은 VC++ 방통대 교재 첫단원

-----코드-----
#include <windows.h>

#define ID_OK_BTN 2000
HINSTANCE g_hInst;
LPCTSTR lpszClass = "HelloAPI";
LPCTSTR ChildClassName = "ChildWin";
LRESULT CALLBACK WndProc(HWND, UNIT, WPARAM, LPARAM);
LRESULT CALLBACK ChildWndProc(HWND hWnd, UNIT Messa, WPARAM wParam, LPARAM lParam);

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdParam, int nCmdShow)
{
 HWND hWnd;
 MSG Message;
 WNDCLASS WndClass;
 g_hInst=hInstance;
-----코드-----

인제 질문 들어감.

HINSTANCE g_hInst 이건 핸들 인스턴스라는 자료형? 전역변수로 선언한건가요?
LPCTSTR lpszClass = "HelloAPI" 이건 LPCTSTR이라는 자료형?? 문자열 넣는거 보니 STR이 string인갑요
LRESULT CALLBACK WndProc 이건 C에서 함수 선언하는걸로 봐도 됨? 위에다가 저렇게 쓰는거 보니 그런 것 같고..

WndProc(HWND, UNIT, WPARAM, LPARAM);
ChildWndProc(HWND hWnd, UNIT Messa, WPARAM wParam, LPARAM lParam);
이 두개는 무슨 차이가 있어서 어떤건 HWND, UNIT같이 자료형만 선언함?
c만 배운 나한텐 function(int, char, double);같이 선언한걸로 보임..

그리고 지금 인스턴스핸들의 정의를 봐도 도대체 먼소린지 이해가 안가지만 나중에 다른거 배우면서 이해 갈 꺼라고 봐도 됨?
교수도 그냥 이런게 있구나 하고 넘어가라는식인데