#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // LEFT RESULT:long(4byte) (반환값) CALLBACK:뒤에서 호출(운영체제가 이 함수를 호출함) => 어셈블리 단에서는 X // 이함수의 호출 방식 : cdecl std인지 (지워도 동작) // 16bit 시절 word : 2bytes long : 4bytes //HWND: int H: 핸들러
HINSTANCE g_hInst; // g:gloval LPSTR lpszClass = L"First"; // lp: long pointer s:string z:마지막 null => char pointer // 제목이 깨질 경우 L
// APIENTRY : entry point => 컴파일 시 사라짐 (cdecl std인지 알려줌) int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance/*예전 사용 흔적*/ , LPSTR lpszCmdParam, int nCmdShow) //notepad A.TXT(인자 A.TXT) // 보여줄지 안보여줄지 { HWND hWnd; MSG Message; WNDCLASS WndClass; // 구조체 g_hInst = hInstance; //공유 가능 (다른 함수에서 접근 가능)
WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 윈도 창의 전체 색 WndClass.hCursor = LoadCursor(NULL, IDC_ARROW); // 마우스 : 화살표 WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); // 실행 창의 제목 옆 아이콘 WndClass.hInstance = hInstance; // 반드시 넣어 주어야 함 WndClass.lpfnWndProc = (WNDPROC)WndProc; // 함수 주소 (메세지를 받을 함수의 이름을 넣어 줌 - 운영체제가 창에 커서가 올라가면 메세지 보내줌 ) WndClass.lpszClassName = lpszClass; // 실행중인 한 덩어리를 클래스라 함 모달리스 (창이 클래스 구분 ) WndClass.lpszMenuName = NULL; WndClass.style = CS_HREDRAW | CS_VREDRAW; // 윈도우 가로 세로 크기가 조절 가능 RegisterClass(&WndClass); // 윈도우에 등록 시키는 함수 - 구조체게 슨 값은 등록을 해야 의미가 있음
hWnd = CreateWindow(lpszClass, lpszClass, // 창 제목 "First" WS_OVERLAPPEDWINDOW, // 스타일 (기본 형 ) CW_USEDEFAULT, // 가로, 세로 시작 점 => 좌표 네개 필요 CW_USEDEFAULT, CW_USEDEFAULT, // 가로 사이즈 CW_USEDEFAULT, // 세로 사이즈 NULL, // 부모 윈도우가 있을 경우 부모 윈도우의 핸들을 지정 (HMENU)NULL, // 인수로 지정된 메뉴는 현재 CreateWindow 함수로 만들어지는 윈도우에서만 사용 hInstance, // 윈도우를 만드는 주체, 즉 프로그램의 핸들 NULL // CREATESTRUCT라는 구조체의 번지 ); ShowWindow(hWnd, nCmdShow); // 화면에 보일지 안보일지 셋팅 하는 함수
while (GetMessage(&Message, 0, 0, 0)) { // 윈도우가 보내는 메시지를 받는 함수 (메시지 큐에서 제일 오래된 것을 들고옴 - 원형 연결리스트 ) // 창 닫으면 GetMessage는 0을 반환 => while문 종료 TranslateMessage(&Message); // 키보드 DispatchMessage(&Message); // 위도우가 할 것은 끝났다 => 어플리케이션 WndProc를 불러다오 } return Message.wParam; // 정상종료인지 비정상 종료인지 반환 - 윈도우 로그에 남을 것임 }
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) // 어플리케이션 핵심 실제 메인 { switch (iMessage) { // 메시지 번호가 인자 case WM_DESTROY: // WM : Window Message PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd, iMessage, wParam, lParam)); // DESTROY이외 처리는 윈도로 보냄 }
|