MFC1장
* WinMain 함수
- C언어의 메인과 마찬가지임..
시작되는 함수는 여기에서 처리함
핵심함수: _tWinMain
MyRegister(hInstance);
InitInstance
★main message loop(가장중요)//메시지 루프
while(GetMessage(&msg,NULL,0,0))
{
if(!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Get Message <- Msg Queue 에서 가지고옴
메시지를 가져오면 루프를 돌고 메시지를 가지고 오지못하면(quit) 종료되는구조.
윈도우에서 Message란?
-모든것이 다 Message다.(보여지는것,생성되는것,이동되는것,입력 등등...)
-Message Driven 방식
H.I.D(Human Input Device)- Keyboard, Mouse등(H/W Event 발생)▶OS에서 감지
-키보드에서 키가 눌리면 하드웨어 이벤트가 발생하고, 이이벤트는 OS에서 감지하며 모니터(출력)에 Message로 보내줌.
-DispatchMessage 함수가 호출이 된다면 윈도우 프로시저 함수를 호출(Window Proc)<_Winproc->윈도우창의 인풋에 대해 메시지를 처리함.
메시지 내용은 (HWND hWnd,UNIT message, WPARAM wParam, LPARAM lParam)에 메시지정보를 담고있음.
작업관리자에서 "응답없음"이뜨는것은 메인메시지 에서 루프가 멈추면 "응답없음"발생
Handle 이란 -어떤 포인터에 관한 값.
-------------------------------tWinMain--------------------------
_tWinMain(HINSTANCE hInstance,) ▶응용프로그램 자체를 식별하는 값(실행파일의 메모리상의 위치)
lpCmdLine ▶ 프로그램시작할때 ~~~.exe /?라던지 실행할때쓰는것
nCmdShow ▶ 윈도우를 화면에 보여줄것인지 말것인지를 지정하는 값.
MSG msg ▶메시지 구조체.
====================================
typedef struct tagMSG{
HWND hwnd; //윈도우핸들.(특정윈도우를 식별할때 핸들로 식별함)▶값
UINT message;//핸들의 UINT형의 message로 전달됨
WPARAM wParam;- 메시지 파라미터(매개변수,인수,인자)
LPARAM lParam;- 메시지 파라미터(매개변수,인수,인자)
DWORD time;- 메시지가 전달된 시간(시스템시간)
POINT pt;-포인터 구조체 (x,y) 모니터상의 표시좌표 ↓y →x
#ifdef _MAC
DWORD lPrivate;
#endif
}MSG, *PMSG,NEAR *NPMSG,FAR *LPMSG;
===================================
HACCEL hAccelTable ▶단축키 테이블
<리소스뷰 ▶ HellowWorld▶HelloWorld.rc▶Acceletator▶IDC_HELLOWORLD(단축키테이블)
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING)
▶IDS_APP_TITLE - 선언부에 가면 그냥 값이들어가있고, 이값을 로딩을해서 전역변수로 선언되어있는 szTitle(TCHAR타입 MAX_LOADSTRING(100개-define) 선언)
▶ 리소스 뷰에서 String Table 안에 보면 IDS_APP_TITLE를 값으로 따지면 103번 그것을 로딩하면 HelloWorld값이 버퍼에저장
:다국어 지원때문에 리소스이름으로 넣어둠.
MyRegisterClass(hInstance)▶윈도우의 RegisterClassEx를 호출하는것이 목적.Class▶등급 c++의 클래스 뜻이아님.
윈도우 스탈일, 레지스터, 아이콘,마우스포인터,배경색,메뉴,윈도우이름-리소스뷰(IDC_HELLOWORLD(icon/Menu)
wcex.lpfnWndProcWinProc등록되었다는것은▶ Msg-OS-메세지큐-처리(WinProc)<호출하지는않음>-수동적으로 OS에의해 호출되어짐
UINT▶unsigned int
CALLBACK▶Call Convention(함수호출 시 스텍에 저장할때 어떻게 넣을꺼냐는것)<_stdcall>
WM_COMMAND: ▶ 어떤키를 눌렀을때 발생한 메세지를 처리
InitInstance(hInstance, nCmdShow)▶ CreateWindow함수를 직접 호출
===========================================================
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL,NULL, hInstance,NULL)
===========================================================
CreateWindow▶윈도우 핸들을 리턴
WS_OVERLAPPEDWINDOW▶ WS: 윈도우 스타일 OVERLAPPEDWINDOW:중첩해서 쓰는 윈도우(가장기본적인윈도우)
WM_PAINT▶윈도우를 다시 그릴때 사용
WM_DESTORY▶ 종료를 눌렀을때 불림.