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 : 대화 상자 닫기
대화상자의 ( 컨트롤 ) 과 ( 멤버변수 ) 사이에서 ( 정보 교환이 자동 ) 으로 이루어 지도록 하는 매커니즘은?
DDX
- 데이터 교환 방법(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 다른 클래스에서 접근 방법
메시지 핸들러 작성하는 방법.
이벤트 처리기 - 메시지 핸들러
가상함수 - 메시지 핸들러
공용 컨트롤
'📜✏️노트 자리없어서 적는 IT 지식📜✏️' 카테고리의 다른 글
정보처리산업기사 필기 공부 (0) | 2024.07.02 |
---|---|
Team프로젝트 : PASS 중간 개발 후기 (0) | 2024.06.30 |
인공 지능 개론 - 시험 (0) | 2024.06.17 |
운영체제 시험문제 - (리뷰 정리 서술형) (0) | 2024.06.16 |
운영체제 - (7장 교착상태 문제) (0) | 2024.06.15 |