[MFC] MFC 기초 - 새로 알게된것 정리 NOTE
오마이갓. 갑자기 회사업무에서 MFC를 사용하게 되었다. 이게 무슨 날벼락이지?
이 페이지는 얼른 적응하기 위해, 잊지 않기 위해 새로 알게된 지식 몇가지를 기록해놓는 페이지이다.
1) _tWinMain
main 함수임. 가장 처음 실행하는 entry point
_t의 의미 : 유니코드 문자열처리
인자 : HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR IpCmdLine,int nCmdShow
HINSTANCE = 응용프로그램을 식별하는 값. 실행파일이미지가 저장된 주소.
(Handle Instance)
lpCmdLine = argv (인자)
nCmdShow = 윈도우를 화면에 보여줄 것인가 말것인가?
2-1) MSG 구조체
typedef struct Msg{
HWND hwnd; //윈도우 핸들 (이 메시지가 어떤 윈도우의 것인가?)
UINT message ; //unsigned integer
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt; //위치(x,y) <- 윈도우에서는 왼쪽 상단이
}MSG
2-2) HACCEL : 단축키(resource view에서 Accelerator에 추가할 수 있음)
3) MyRegiesterclass 함수
_tWinMain에서 호출하는 함수로, 마지막에 RegisterClassEx 함수를 호출한다.
ICON, resource, 응용프로그램 메모리 주소, 메뉴 등등을 등록함.
WndProc 함수의 주소도 등록.
(이때 등록한 WndProc 함수 주소를 기억했다가, 메시지가 발생하면 꺼내서 처리)
WndProc 을 직접 실행할 일은 없지만 이때 주소를 등록해놨다가
메시지큐에서 꺼내지면 Os에서 WndProc 함수를 실행해줌.
4) InitInstance 함수
_tWinMain에서 호출하는 함수로,
CreateWindow 함수를 통해서 실제 윈도우를 생성해서 윈도우 핸들을 return.
5) GetMessage 함수
_tWinMain에서 호출하는 함수로,
while 루프를 돌며 message queue 에서 메시지를 계속 가져옴.
각 메시지별로 DispatchMessage 함수 호출 함.
6) Dispatch Message함수
Dispatch Message함수에서는 Windows Procedure 함수를 호출한다.
WndProc 함수에서는 message에따라서 사용자가 원하는 작업을 한다.
WndProc(HWND hwdn, UNIT message, WPARAM wParam, LPARAM lParam)
7) MFC 클래스
CObject “MFC의 최상위 클래스”
->
CCmdTarget
(윈도우 가아님) ->(윈도우)
CWnd “모든 윈도우의 최상위클래스”
8) HWND 와 CWND의 차이
HWND : 윈도우 핸들러! (윈도우를 가리킴)
CWND : MFC클래스. 윈도우의 모든 기능을 가짐.
당연히 멤버변수로 HWND를 가지고 있다.
" Mainframe이나 서로 다른 윈도우에서 사용하려면 CWND가 아닌 HWND값을 직접 알아야 하는 경우가 많음."
따라서 아래와 같이 서로 받아오는 방법을 알면 유용할 것!
CWnd *pWnd;
HWND hWnd;
// CWnd -> HWND
hWnd = pWnd->m_hWnd;
// HWND -> CWnd
pWnd = CWnd::FromHandle( hWnd );