본문 바로가기

📜✏️노트 자리없어서 적는 IT 지식📜✏️

VC++ - 문제

 

 

 

8주 문제

 

- 윈도우와 윈도우 객체의 관계

윈도우윈도우 객체 연결 

더보기

Attech() : 

윈도우와 윈도우 객체 분리, 내부 핸들 값 리턴

더보기

Detach() : 

 

 

- 메뉴 항목 갱신하기 (상태 변경하는 방법)

더보기

명령 갱신 핸들러 추가 : UPDATE_COMMAND_UI

 

CCmdUI 클래스를 이용하여 메뉴 상태(활성/비활성) 설정

 

Enable() = 활성화

Enable(0) = 비활성화

 

SetCheck = 체크표시

 

 

SystemMenu = 메인프레임에 우클릭 했을 때 나오는 컨텍스트 메뉴

FALSE 면 설정한 항목이

TRUE 면 기본 항목이 나옴

 

 

 

 

 

메모리를 파일처럼 사용하기 위한 MFC클래스
데이터를 디스크가 아닌 메모리 버퍼에 저장되고 파일I/O와 유사한 방식

더보기

CMemFile

 

- 도큐먼트와 뷰 클래스의 역할과 장점

 

더보기
도큐먼트 (문서) 뷰 (view 화면)    이렇게 생각하시고,
데이터를 저장, 읽기 데이터를 화면에 표시
변경사항 발생 시 뷰의 화면 갱신 사용자와 상호작용

 

연속적인 저장 매체 (디스크 파일)에 객체의 내용을 저장/읽기 기법
CFile 클래스를 이용하여 객체 내용 저장/읽기
일반적으로 MFC 에서는 CArchive 클래스 이용해 입출력는 무엇을 의미하는가

더보기

직렬화

 

 

- 사용자 정의 클래스에서 직렬화를 제공하기 위한 6가지 단계

 

더보기

1. CObject 상속

2. 매크로 선언 DECLARE_SERIAL

3. CMyData // 기본 생성자

4. Serialize 함수 재정의

5.IMPLEMETN_SERIAL // 매크로 선언

6. Serialize 함수 구현

 

 

 

표준화된 형태특성을 가진 윈도우

사용자의 입력을 받거나 정보를 보여줌 입출력

버튼, 에디트 박스, 콤보 박스 등등을 나타내는 건?

더보기

컨트롤

 

- 통지 메시지 vs 컨트롤 메시지 개념 및 비교

더보기
통지 메시지(Notification)  컨트롤 메시지
컨트롤이 부모 윈도우에 보내는 메시지 부모 윈도우가 컨트롤에게 보내는 메시지
컨트롤의 상태가 변화됨을 알림 컨트롤의 상태를 알아내거나 변경
오류를 알림 컨트롤에 따라 보낼 수 있는 메시지 종류가 다름

 

 

 

- 표준 컨트롤과 공통 컨트롤, 스크롤바의 통지 메시지들을 선택하시오.

 

더보기

표준 = WM_COMMAND 메시지 사용(통지 메세지를 처리 할 때)

공통 = WM_NOTIFY 메시지 사용

스크롤 바 = W,_VSCROLL , WM_HSCROLL

 

 

- (button, combo box, edit, list box)의 통지 코드, 공통 컨트롤 통지 코드

더보기

(NM_CLICK, NM_RCLICK, NM_DBLCLK, NM_SETFOCUS, NM_KILLFOCUS) 순서대로

 

클릭 , 좌클릭, 더블클릭, 포커스 얻음, 포커스 잃음

 

- 통지 메시지 처리 방법 (가상함수 vs 메시지 핸들러)

 

더보기

 

가상함수 메시지 핸들러
표준 : OnCommand 표준 : On_Notification , ON_CONTROL
공통 : OnNotify 공통 : ON_NOTIFY

 

- CEdit 클래스 멤버함수와 CWnd 멤버함수 활용 (함수명과 활용방법)

더보기

SetWindowText - 에디트 컨트롤의 텍스트를 변경한다.

GetWindowText - 에디트 컨트롤에 입력된 텍스트를 얻는다.

 

 

스크롤바 코드의 개념!

더보기

사용자가 스크롤바를 조작하면 WM_HSCROLL , WM_VSCROLL 메시지 발생한다.
스크롤바 코드는 = 사용자의 구체적인 행위를 알 수 있는 정보이다.

 

서브 클래싱과 메시지 반사의 개념(누가 메시지를 처리하는가?)

더보기

정답 : 서브 클래싱

 

서브 클래싱은?

- 윈도우 프로시저로 가는 메시지를 중간에서 붙잡아 처리
- 윈도우 동작을 바꿀 수 있음

 

메시지 반사는?
- 부모 윈도우가 처리하지 않는 통지 메시지를 컨트롤 자신이 처리

 

 

- 서브 클래싱과 메시지 반사 구현 순서를 적으시오.

더보기

서브 클래싱

1. 기존의 클래스를 기반으로 새로운 윈도우나 컨트롤 클래스 생성

2. 메시지 핸들러를 추가해서 기능을 재정의

     - > 정적 서브 클래싱

3. CWnd::SubclassWindow() 또는 CWnd:Subclassing() 함수 호출

    - > 실행 중 동작을 변경하는 동적 서브 클래싱



메시지 반사

1. 기존 컨트롤 클래스를 상속받아 새로운 클래스를 만들고

                      자신의 통지 메시지를 처리하는 함수를 작성

2. 새로 만든 클래스를 이용하여 컨트롤 생성

 

- 대화 상자의 개념과 종류

 

더보기

다양한 컨트롤을 포함하고 있는 ( 일종의 윈도우 ) ,사용자로부터 입력을 받거나 정보를 출력 ( 입출력 )

 

종류 : 
모드형 대화 상자 : 대화상자를 닫아야 다른 작업 가능


비모드형 대화 상자 : 대화 상자를 닫지 않아도 다른 작업 가능

 

 

- CDialog 클래스 가상 함수명과 역할(OnInitDialog, OnOK, OnCancel)

 

더보기

OnInitDialog : 컨트롤을 초기화 하거나 키보드 포커스 변경

OnOK : 컨트롤의 값을 읽거나 값의 타당서 여부를 검사한 후 대화 상자 닫기

OnCancel : 대화 상자 닫기

 

 

 

 

대화상자의 ( 컨트롤 )( 멤버변수 ) 사이에서 ( 정보 교환이 자동 ) 으로 이루어 지도록 하는 매커니즘은?

 

- 데이터 교환 방법(UpdateData() 사용법 및 UpdateData() 호출 시의
= DoDataExchange, DDX_Text, AfxSetWindowText, GetWindowText의 호출 순서)

 

더보기

UpdataData(FALSE) -> DoDataExchange -> DDX_Text -> AfxSetWindowText
UpdataData(TRUE) -> DoDataExchange->  DDX_Text -> GetWindowText 

 

tip : UpdateData(TRUE)를 설정한 후에 바꾸고 UpdateData(FALSE) 를 설정해야 값이 컨트롤에 전달되어서 바뀐다!

 

 

- 비모드형 대화상자 작성 시 주의사항은?

더보기

함수를 생성할 때 CDialog::DoModal() 대신 CDialog::Create() 호출 // 모달 대신 크리에이터 호출

대화 상자를 닫을 때 CDialog::EndDialog() 대신 CWnd::DestroyWindow() 호출 // 엔드대신 디스트로이 윈도우

 

모드형 대화 상자 객체는 ( 스택 ) 에 생성하지만 비모드형 대화 상자는 ( 힙 ) 에 생성

 - > 스택에 생성하면 선택 영역을 벗어날 때 소멸자가 호출되어    대화 상자가 자동으로 파괴됨

 

- 비모드형 대화상자를 힙에 생성하고 활용한 후 생성한 대화상자 객체는 윈도우가 파괴될 때 이 가상함수를 재정의해서 정리해야 한다. 윈도우가 파괴될 때 마지막으로 호출되는 이 가상 함수는?

 

더보기

CWnd::PostNcDestroy() 

 

도큐먼트의 내용을 화면에 표시하는 역할을 하는 뷰를 자식으로 갖는 윈도우을 뭐라하는가?

더보기

- 도큐먼트 프레임 윈도우

SDI 에서는 메인 윈도우 = 도큐먼트 윈도우

MDI 에서는 메인윈도우 = 도큐먼트 윈도우

왜냐하면 MDI는 여러개의 윈도우가 있어서 그럼

 

 

 

- SDI에서 주요 객체를 참조하는 함수명과 역할(GetDocument, GetActiveView, AfxGetApp, AfxGetMainWnd)

더보기

뷰 객체와 연결된 도큐먼트는 ? = GetDocument

 

현재 작업하고 있는 활성 뷰는 ? = GetActiveView 

 

응용 프로그램은? = AfxGetApp 

 

메인 윈도우 ( 객체의 주소 리턴 )은? = AfxGetMainWnd 

 

- GetDlgItemText(), SetDlgItemText() 함수 사용법

더보기

GetDlgItemText : 대화상자에 있는 컨트롤의 문자열 get


SetDlgItemText : 대화상자에 있는 컨트롤에 문자열 set

 

 

- 데이터가 수정되었음을 도큐먼트 객체에 알리고,
윈도우 종료할 때 알림창 뜸을 해주는 함수는? > 뭔가를 알리고 뜨게해주는 건?

더보기

SetModifiedFlag 

 

- UpdateAllViews 함수의 역할과 내부 호출 순서

 

더보기

(UpdateAllViews -> OnUpdate -> Invalidate -> OnPaint -> OnDraw)
모든 뷰 객체에게 화면을 갱신하도록 지시

1. UpdateAllViews 를 하게 되면

2. OnUpdate(); // Invalidate 함수 호출 및 화면 전체 무효화

3. Invalidate(True); // WM_PAINT 메시지 호출

4. OnPaint(); // CPaintDC 객체 만든 후 OnDraw() 함수에 전달

5. OnDraw(); // 화면에 출력

 


- 명령 라우팅 순서 6개

 

더보기

1. 활성 뷰 객체

2. 활성 도큐먼트 객체

3. 도큐먼트 템플릿 객체

4. 프레임 윈도우 객체

5. 응용 프로그램 객체

6. ::DefWindowProdc();

 

 

시험 은 
Menu에서 코드 문제 1개가 나간다.


대화상자

표준 컨트롤에서 통지메시지 처리하는 방법

DocView 다른 클래스에서 접근 방법

메시지 핸들러 작성하는 방법.



이벤트 처리기 - 메시지 핸들러


가상함수 - 메시지 핸들러


공용 컨트롤