전공/데이터통신

lab 02~~

twoweeks-within 2025. 4. 19. 12:10

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




'전공 > 데이터통신' 카테고리의 다른 글

5장  (0) 2025.04.14
3장 -2  (0) 2025.04.13
3장  (0) 2025.04.12
2장 -2  (0) 2025.04.12
CH 2.  (0) 2025.03.21