하나의묵 2020. 3. 11. 12:33

MFC

 

 

 

MFC

-MFC(Microsoft Foundation Class Library)란 마이크로 소프트에서 만든 Window APIC++로 둘러싼 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 기반의 프로그램 제작 환경 제공

- ActiveXOLEODBC 등의 다양한 인터페이스의 기본 제공

- 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 와 같이 공부필요.