New project -> Win32 Application -> A typical "Hello World" application
을 선택하여.. 프로그램을 만든다... 그리고 그냥 컴파일, 링킹, 빌딩 시키면.. 그냥 실행이 된다.
가장 기초적인 "Hello World" 의 MFC 기초 판.. 이 그냥 실행하게 된다. (키보드 사용.. 없이도 - 프로젝트 생성 할 때 치는 부분은 제외 - 돌아가는 기본 프로그램이 생기게 된다.
생기는.. 함수와 등등..을 분석 해보자면...
WinMain() 모든 윈도우 응용 프로그램의 시작. 운영체제에 의해 Win32 기반 응용프로그램의 초기등록위치에 호출
MyRegisterClass() 응용프로그램의 인스턴트 핸들을 인수로 전달, 구조체 멤버로 전달
InitInstance() 프로그램 시작준비 함수 윈도우 만들어 화면에 표시 윈도우 영역을 업데이트하는 역할 윈도우 객체 초기화
CreateWindow() 오버랩윈도우(응용프로그램의 메인으로 쓸 수 있는 윈도우) 팝업윈도우(일시적 등장하는 윈도우) 자식윈도우(부모 윈도우의 클라이언트 영역을 벗어날 수 없는 윈도우) 만듬 윈도우의 클래스, 타이틀, 스타일, 초기위치, 크기 설정 부모윈도우나 소유자, 윈도우 메뉴를 설정
ShowWindow() CreateWindow()에 의하여 만들어진 윈도우핸들과 윈도우 상태 매개변수(nCmdShow) 이용, 윈도우를 화면에 보여줌
UpdateWindow() 윈도우에 대한 핸들을 전달받아서 윈도우의 클라이언트 영역이 비어있지 않으면 클라이언트 영역 다시 그리도록 윈도우에 WM_PAINT 메시지 보내는 역할 클라이언트 영역 비어있으면 no 메시지 이 함수가 없으면 화면에 내용 변화 있어도 자동반영되지 않음
WndProc() 응용프로그램의 메인 윈도우로 들어오는 메시지를 처리하는 역할 윈도우가 여러개라면 각각의 윈도우 클래스 마다 프로시져 만들어 줘야 함.
PAINTSTRUCT 구조체 출력 대상을 그릴때 사용되는 정보 포함.
DialogBox() 응용프로그램에 종속된 모덜 다이얼로그 박스를 만드는 함수 callback() 이 EndDialog() 호출하여 모덜다이얼로그 박스 끝내기 전에는 제어 돌려주지 않음
Destroy Window() 설정된 윈도우 파괴하는 함수 윈도우 비활성화 작업 자식 윈도우 있으면 자식윈도우부터 모두 파괴.
DefWindowProc() 응용프로그램이 처리하지 않는 윈도우 메시지에 기본처리 제공하기 위해 디폴트 윈도우 프로시저 호출
BeginPaint() 그리기 할 윈도우 준비 PAINTSTRUCT 구조체를 그리기 정보로 채움
EndPaint() 그리기 끝났음 알려주는 함수 항상 0 이 아닌 return
RECT 구조체 사각형의 왼쪽위, 오른쪽아래 좌표 정의
GetClientRect() 윈도우의 클라이언트 영역좌표 추출
DrawText() 설정된 사각형에 포맷된 텍스트 출력 DC - Device Context (그래픽 모드 정의한 구조) - 에 선택된 폰트, 컬러, 색 사용하여서 출력 DT_SINGLELINE 포멧형식 설정되지 않는 한 Multi-lines 지원.
PostQuitMessage() WN_DESTROY 에 대한 응답으로 사용 시스템에 요청한 것을 끝내는 지시 역할
About() About 다이얼로그 박스라는 윈도우에서 생기는 메시지 처리 WinProc() 와 구조 같음
거기다 마우스 이벤트를 추가시켜 보았다..
주목할 곳은 WndProc() 에 있는 듯 하다...
WndProc() 함수의 switch 구문 사이에.. case 로 아래 내용을 추가시키면.. 컴파일 했을 경우.. 마우스 이벤트가 일어나게 된다..
case WM_LBUTTONDOWN: MessageBox(hWnd, "You clicked Left mouse button.", "Mouse Event", MB_OK | MB_ICONINFORMATION); break;
case WM_RBUTTONDOWN: MessageBox(hWnd, "You clicked Right mouse button.", "Mouse Event", MB_OK | MB_ICONINFORMATION); break;
아마 WM_LBUTTONDOWN 이 왼쪽 마우스 버튼, WM_RBUTTONDOWN 이 오른쪽 마우스 버튼.. MessageBox(hWnd, "메세지 내용", "메세지 막스 제목", MB_OK | MB_ICONINFORMATION);