MFC
MFC
MFC
-MFC(Microsoft Foundation Class Library)란 마이크로 소프트에서 만든 Window API를 C++로 둘러싼 Library
-Window API: 마이크로 소프트 윈도우 운영체제들이 사용하는 API이며, C/C++ 프로그램에서 직접 운영체제와 상호 작용할 수 있도록 만들어졌음.
- MFC를 사용하면 코딩의 효율을 극대화 시킬 수 있어 대부분의 C++ 개발자들이 사용
Window API가 제공하는 기능은 총 8가지
기본서비스 기능 : 파일시스텀, 장치, 프로세스, 스레드, 오류처리
2.고급서비스 : 부가 기능을 커널에 사용할 수 있게 도와줌,
윈도우 레지스트리, 시스템종료/다시시작or중단, 윈도우 서비스 시작/중지/만들기, 사용자계 정 만들기
3.그래픽 장치 인터페이스(GDI: Graphics Device Interface) 지원
4.사용자 인터페이스 (화면의 창, 단추, 스크롤바와 같이 기본적인 컨트롤을 만들어 관리, 마 우스와 키보드등 입력장치로 입력받는 기능, 윈도우의 GUI와 연동하는 기능을 제공)
5.공통 대화 상자 라이브러리
6.공통 컨트롤 라이브러리(상태표시줄, 도구모음 등)
7.윈도 셸(Window shell)
8. 네트워크 서비스
장점.
- 프로그램 개발 시간을 크게 단축
- C++ 프로그래밍을 하면서도 Win32 SDK 함수를 그대로 사용가능
- 안전한 동적 메모리 관리 그리고 할당 영역 검증, 디버깅 등의 기능을 활용가능
- 다른 운영 체제로 이식을 할 수 있다.
- 개발자로 하여금 손쉬운 GUI 기반의 프로그램 제작 환경 제공
- ActiveX․OLE․ODBC 등의 다양한 인터페이스의 기본 제공
- Win32 SDK(API)에 비하여 유지 보수가 쉽다.
Win Main함수
WinMain() 함수의 원형
:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
}
- hInstance 현재 실행되고 있는 프로그램의 핸들
핸들이란? 어떤 대상에 붙여진 레이블(Label)과 같은 것으로, 대상을 식별하는 데 사용함.
그리고 특정 대상을 관리 가능.
*핸들 값은 예외없이 모두 접두어 h로 시작한다.
*핸들은 정수형이며 32bit 값이다.
*핸들은 운영체제가 발급하며, 사용자는 할당된 핸들을 쓰기만 하면 된다.
*같은 종류의 핸들끼리는 절대 중복된 값을 가지지 않는다. 핸들은 단순한 구분자이므로 핸들*에 어떤 값이 들어가 있는지 알 필요가 없다.
- hPrevInstance 바로 앞에 실행된 프로그램의 인스턴스 핸들, 통상 NULL값을 준다.
- lpCmdLine 명령행 인자.
- Main() 함수의 argv에 해당
- nCmdShow 윈도우를 보여주는 형태의 플레그
타입.
- BYTE unsigned char형
-WORD unsigned short형
-DWORD unsigned long형
-LONG long형과 같음
-LPSTR char*형과 같음
MFC는
WinMain( ) 함수와 WndProc( ) 함수로 구성
WinMain( )
{
윈도우 클래스 만들기 - (RegisterClass( ... )
윈도우 객체 생성하기 - (CreateWindow( ... )
윈도우 객체 화면에 띄우기 - (ShowWindow( ... )
메시지 루프 돌리기 (while(GetMessage( ...... ) ) )
}
WndProc( )
{
전달된 메시지 처리하기
}
WinMain( ) 함수는 프로그램의 윈도우 자체를 생성만 한다.
WndProc( ) 함수는 실제 일어나는 윈도우 메시지를 처리하는 역할을 수행한다.
메시지 루프
-편집기(Editor) 프로그램의 경우, 키보드로부터 입력받은 문자를 화면에 출력하는 기능을 처리해야함
-IO Device(키보드, 마우스 등)으로부터 발생한 이벤트를 메시지 루프에서 감지하고 그 메시지를 윈도우 프로시져(Procedure) 함수로 보내주면, 화면에 해당하는 문자를 출력해줌
- 윈도우 프로시져 함수로 메시지를 보내는 역할을 하는 것이 바로 메시지 루프의 역할이라고 할 수 있음.
윈도우 객체 생성
CreateWindow()의 원형
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x, int y,
int nWidth, int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hInstance,
PVOID lpParam);
- lpClassName : 윈도우의 클래스를 지정하는 문자열이다.
- lpWindowName : 윈도우의 제목 표시줄에 보여줄 문자열이다.
- dwStyle : 윈도우의 스타일을 지정한다.
- x, y : 윈도우의 좌표를 지정한다.
- nWidth, nHeight : 윈도우의 폭과 높이를 장치 단위(픽셀)로 지정한다.
- hWndParent : 부모 윈도우 또는 소유주 윈도우의 핸들을 지정한다.
- hMenu : 겹쳐진(Overlapped) 윈도우나 팝업 윈도우의 경우 메뉴의 핸들을 지정한다.
- hInstance : 윈도우를 생성하는 인스턴스 핸들을 지정한다.
- lpParam : WM_CREATE 메시지의 인수 IParam으로 전달될 CREATESTRUCT 구조체의 포인터이다.
Win32 ->MFC 와 같이 공부필요.