MFC
: gui x
CString class
: ANSI : 8bit -> 127 까지
유니코드 : 16bit > 2byte
>> 각종문제..
TCHAR : 문자 자료형
> _T(), TEXT() // macro
// + 오퍼레이터 -> 문자열 추가
Format() : size set // CString
LoadString() : 문자열 리소스 load
> 삽입 가능
업캐스팅
: 포인터의 class -> 포인터 인자
Offset
: 좌표 +
PtInRect() : point 가 Rect 안에 있는지
SIZE
TIME : sec
> TimeSpan : 경과시간 64bit
> .Format : 8byte 에 대한 view // CTime : 인자안넘겨줌
<>CString
CTimeSpan : 차이를 각각 넣어서 CString으로 출력
MFC Array Class
: 참조오류 알림, 크기 가변, 템플릿 // 헤더파일 필요
가변크기 : 동적, SetSize
>RemoveAt(), InsertAt() > GetSize()
템플릿 배열 // afxtempl.h
: 타입만 다르고 나머지는 비템플릿과 동일 // 구조체 등
MFC List Class
: 템플릿, 헤더파일,
AddHead : 앞에서부터 <> Tail
GetNext : 앞에서부터 출력 <> Prev
앞뒤로 데이터 삽입, 삭제
Map Class : Hash Table
ex) 전화번호부 : 원하는 key 찾기
<> 분류x 배열 > 순차탐색 > 시간낭비
사람이름 > 해시함수 > index
ex) John > Hash > 03 // 데이터는 값
> 03만하면 전화번호(data) 알 수 있음
비템플릿
Class : Key값 (index)
데이터타입 : 데이터
<> 템플릿: 둘다 생성
>
삽입,삭제,순환,
+ 테이블 크기 설정 > 성능
수식을 다 읽은후 > CString > 함수 이용 > 연산/피연산 분리 > 결과 출력
//250325, 1500
// MFC program Struct
MFC_class
: CObject > CCmdTarget > CWnd +a
CObject class
1. 실행 중인 객체정보
2. 동적 객체 생성
3. R/W > 직렬화
4. 객체 점검
5.상호 클래스 호환
// 각자 다른 Macro function 필요
// 클래스 와 main 함수 내에 각각
// 상위단계 매크로 > 하위단계까지
1. CMyClass // 자식들
> 여러개의 CObject
> 종류마다 다른 역할
> 누구인지 확인함수 Bool
2. public에 CMyclass();
> ASSERT 를 쓰기위한 MFC만의 동적객체생성 방식
/*
ASSERT macro function
조건이 참일시 > 통과
<> 거짓일시 > program 종료
*/
4. AssertValid() , 2개의 멤버변수
> 멤버번수로 값이 큰지 작은지 확인
CObject pointer 저장 하기위한 집합 클래스O
MFC 전역함수O
> AfxMessageBox // 디버깅 (_T(원하는));
TRACE() : 디버깅시 출력
인스턴스 핸들값 : loaded 실행 파일 virtual memory address
CSimpleApp(응용),CMainFrame(프레임윈도우),CChildView(뷰)
file > 원하는 문구를 넣고 > 열어서 > 문구를 불러와서
// APP class initinstance() 쪽에서 CString 클래스로 보관
> view 화면에 출력
// view Class
OS 출력 system 설계시..
1. 장치가 바뀌더라도 program 수정 X
2. 출력되는 영역에 제약이 있어야함 > 화면분할 가능
> 모니터(출력장치) 직접접근X, 독점사용X
> Prior program이 밑에 깔리도록
GDI , Device_Context
(Graphics_Device_Interface)
1. GDI
: OS의 일부, .dll
> Program > GDI(OS) > 출력장치
2. Device Context (DC)
GDI 가 생성,관리 // 구조체
: Program <> DeviceContext(GDI내부)<>GDI<>장치드라이버<>출력장치
> GDI 쪽에 출력 요청과 관련한 세부요청을 담는 상자//구조체 > GDI는 핸들을 돌려줌
무효영역 (중요!!) : 겹쳐져있어서 다시 그려야 할 영역
> 발생시 메세지(WM_PAINT) 발생시킴
Program) 반드시 처리해야하는 영역 !
> MFC 에서는 Begin,EndPaint()는 코드로 안드러냄 // DeviceContext Class 에 다 있음
> CPaintDC dc(this) 만 선언해주면 그안에 다 있슴
WM_PAINT 메세지 발생 상황
: 윈도우 생성/크기변경/최소최대/ 다른윈도우가 가림
// 외부상황
무효영역 생성함수 > 일부러 SW 로 발생함수
: 강제로 무효영역을 만들어 WM_PAINT 메세지 생성
CPaintDC class
: WM_PAINT 메세지 핸들러에서만 // OnPaint
<>
CClientDC class
: 메세지 핸들러 제외
CWindowDC class
: 클라이언트 영역 밖 : 메모장으로 따지면 파일탭 위의 맨맨맨 좌측위
그리기 함수 : 점찍기, 선그리기, 도형그리기 등등
단위 : Pixel
> 모니터의 해상도가 클수록 내가 그린게 작아짐 // 논리좌표 > 상업용으로 애매
> mm단위로 해주는 함수사용 // 장치좌표
장치좌표의 2가지
클라이언트좌표 <> 스크린 좌표
: 실행 program : 내 모니터
그리기모드
ex) 동그라미를 그렸다가 지울때..
> 까만 동그라미를 했으면 힌색으로 덮어씀 등 여러방법
그리기 모드 변경
dc.SetROP2(원하는모드)
GDI object class
: DC 의 속성
1. DC 클래스의 객체 하나 생성
2. SelectObject() 함수로 DC와 객체를 연결
내장객체 > 미리 만들어져있어서 따로 GDI_object_class 필요 X
view file > Alt+Enter > 클래스뷰에서 함수 추가 > 핸들러 auto연결
대화상자
: 다양한 컨트롤 포함
ex) 찾기, 속성
mod형)닫아야 다른작업 가능
컨트롤정보들 > 리소스 스크립트 (GUI)
Tab 순서
속성
가상함수
OK
{
updataData
}
> 컨트롤을 놓고 사용자에게 입력 받은것을 update
대화상자 : 부모
컨트롤 : 자식
Init : 부모 -> 자식
OK : 자식(사용자가 컨트롤 선택) -> 부모
( 대화상자 -> 대화상자 객체)
>> DDX : 자동화
: UpdateData(TRUE, FALSE)
FALSE : 부 -> 자
TRUE : 자 -> 부
//컨트롤마다 변수 설정 -> 부모
DDV : 데이터의 타당성 검사
대화상자 기반 APP
: 대화상자가 메인윈도우역할
doModal의 return : IDok / IDcancel
> if( IDOK이면)
{ 처리 }
대부분의 기능을 대화상자 클래스 안에 넣어버림
> 결과값을 가직 처리하는 경우는 거의 X