Chapter 1 시작을 위한 준비 ... 11 1-1 Win32 API 프로그래밍 ... 13 윈도우즈 어플리케이션은 어디에서 시작하는가? ... 13 진짜 main과 WinMain이 시작 함수일까? ... 19 CRT main 함수 지정 ... 22 1-2 Win32 GUI 프로그래밍 ... 25 WinMain 함수 원형 ... 25 WinMain 함수의 기본 골격 ... 27 윈도우 프로시저 ... 33 메시지 루프를 종료하기 위해 WM_DESTROY를 처리해야 한다 ... 35 화면에 내용을 출력하기 위해 WM_PAINT를 처리해야 한다 ... 37 GetMessage를 다시 한 번 ... 38 1-3 핸들 ... 42 핸들이 뭐지? ... 42 유저 객체 핸들 ... 43 GDI 객체 핸들 ... 45 커널 객체 핸들 ... 46 1-4 유니코드 ... 47 유니코드란? ... 47 그럼 어떻게 유니코드를 사용하지? ... 48 Win32 API의 유니코드 지원 ... 53 1-5 함수 호출 규약 ... 55 _ _cdecl ... 55 _ _stdcall ... 58 _ _fastcall ... 60 1-6 가상함수 ... 62 가상함수 ... 62 클래스 단위로 컴파일러가 생성하는 가상함수 테이블 ... 67 1-7 pragma와 , ... 70 pragma ... 70 과 ... 71 핵심 포인트 ... 72 Chapter 2 MFC 어플리케이션의 시작과 끝 ... 73 2-1 가장 간단한 MFC 프로그램 ... 75 프로젝트 생성과 기본 코드 ... 75 WinMain은 어디에? ... 78 어플리케이션과 MFC의 만남 ... 83 다시 WinMain과 AfxWinMain ... 86 2-2 실전 프로젝트 ... 89 실전 프로젝트 생성 ... 89 InitInstance ... 92 InitInstance의 나머지는 간단하게 ... 107 2-3 메시지 구조 ... 110 메시지 큐 ... 110 MFC의 메시지 루프 ... 111 MFC의 윈도우 프로시저 ... 117 2-4 어플리케이션 종료 ... 123 프레임/뷰/도큐먼트 파괴 ... 123 ExitInstance ... 127 핵심 포인트 ... 129 Chapter 3 RTTI와 CRuntimeClass ... 131 3-1 RTTI ... 133 RTTI ... 133 3-2 CRuntimeClass ... 142 CRuntimeClass는 어디에 쓰는 물건인가? ... 142 CRuntimeClass 매크로 ... 147 일반화된 객체 생성 ... 151 실행 시 객체 자료형 검사 ... 153 실행 시 객체 유효성 검사 ... 156 직렬화 ... 158 CRuntimeClass 리스트 ... 160 핵심 포인트 ... 163 Chapter 4 MFC 메시지 ... 165 4-1 윈도우즈 메시지 ... 167 메시지란? ... 167 메시지 큐를 통과하지 않는 메시지 ... 168 4-2 MFC 메시지 핸들러 ... 170 4-3 MFC 메시지 루프 다음으로의 여행 ... 176 4-4 CWnd::OnWndMsg와 메시지 맵 ... 184 4-5 메시지 종류 ... 205 윈도우 메시지 ... 205 명령 메시지 ... 205 통지 메시지 ... 208 사용자 정의 메시지 ... 210 4-6 명령 메시지와 통지 메시지는 어떤 것이 특별한가? ... 211 4-7 메시지 리플렉션 ... 218 핵심 포인트 ... 224 Chapter 5 MFC와 스레드 ... 227 5-1 스레드 ... 229 프로세스와 스레드 ... 229 스레드 생성 ... 230 5-2 워커 스레드와 UI 스레드 ... 235 워커 스레드 ... 235 UI 스레드 ... 240 5-3 MFC 스레드 ... 245 MFC 워커 스레드 ... 245 MFC UI 스레드 ... 246 MFC 스레드 구조 ... 250 5-4 TLS(Thread Local Storage) ... 263 Win32 TLS ... 264 컴파일러 지원 TLS ... 268 MFC TLS ... 270 PROCESS_LOCAL ... 283 5-5 _AFX_THREAD_STATE, AFX_MODULE_STATE, AFX_MODULE_THREAD_STATE ... 286 _AFX_THREAD_STATE ... 288 AFX_MODULE_STATE ... 289 AFX_MODULE_THREAD_STATE ... 291 핵심 포인트 ... 302 Chapter 6 뷰와 도큐먼트 ... 303 6-1 자료 구조 설계와 구현 ... 305 자료 구조 설계 ... 305 자료 구조 구현 - CFigure ... 306 자료 구조 구현 - CLine ... 309 6-2 뷰와 도큐먼트 ... 313 데이터의 생성 ... 313 데이터의 보관 ... 316 데이터를 이용한 화면 복원 ... 318 데이터를 이용한 인쇄 ... 321 데이터의 파괴 ... 327 파일 입·출력 ... 331 6-3 "WBChat" UI 구현 ... 337 메뉴, 툴바, 단축키 구현 ... 337 도형 객체 이동 ... 340 6-4 직렬화 ... 349 직렬화는 어디에서 시작되나 ... 349 직렬화의 핵심 Serialize 함수 ... 355 클래스 버전 관리는 어떻게? ... 365 직렬화 파일 포맷 ... 368 핵심 포인트 ... 371 Chapter 7 대화상자와 서브클래싱 ... 373 7-1 CAttribute 구현 ... 375 CFigure와 CAttribute ... 375 속성 설정 사용자 인테페이스 ... 382 7-2 대화상자 구현 ... 384 대화상자 리소스 편집 ... 384 대화상자 클래스 추가 ... 386 변수 연결 ... 388 7-3 DoDataExchange ... 394 DoModal 안으로... ... 394 대화상자의 90% - DoDataExchange ... 399 DDX 함수 ... 401 DDV 함수 ... 403 값 변수와 컨트롤 변수 초기화 ... 405 [확인]과 [취소] 버튼 ... 408 7-4 컨트롤 서브클래싱 ... 410 확장된 컨트롤 클래스 구현 ... 410 확장된 컨트롤 변수 연결 ... 412 확장된 컨트롤 클래스 기능 추가 ... 412 핵심 포인트 ... 421 Chapter 8 MFC 소켓 통신 ... 423 8-1 소켓 통신 ... 425 TCP / IP 모델 ... 425 소켓이란? ... 427 클라이언트/서버 모델 ... 429 서버 함수 ... 431 클라이언트 함수 ... 444 8-2 WSAAsyncSelect 통신 모델 ... 449 모델 이름이 왜 WSAAsyncSelect일까? ... 449 소켓 메시지 ... 452 8-3 MFC 소켓 ... 455 MFC 소켓 클래스 ... 455 CAsyncSocket ... 457 CAsyncSocket는 어떻게 이벤트 메시지를 처리하나? ... 463 CSocket ... 470 8-4 직렬화 소켓 ... 476 1대1 통신 방식으로 서버와 클라이언트 구현 ... 476 직렬화 소켓 ... 485 직렬화에서 소켓 타임 아웃 처리 ... 490 8-5 스레드와 MFC 소켓 ... 494 스레드와 MFC 소켓 ... 494 직렬화를 이용한 패킷 설계 ... 501 핵심 포인트 ... 506 Chapter 9 데이터베이스 ... 507 9-1 데이터베이스 접근 전략 ... 509 UDA ... 509 ADO를 MFC에서 어떻게 사용하지? ... 510 9-2 대화 상대 관리 사용자 인터페이스 구현 ... 514 분할 윈도우 ... 514 대화 상대 관리 메뉴 ... 518 대화상자 구현 ... 519 9-3 ADO ... 521 테이블 정의 ... 521 ADO를 사용한 데이터 소스 접속 ... 522 ADO를 사용한 검색 ... 528 ADO를 사용한 수정과 삭제 ... 531 ADO를 사용한 삽입 ... 535 9-4 ODBC ... 538 CDatabase ... 538 CRecordset ... 542 CRecordset는 상속해 사용한다 ... 544 MFC에서 Stored procedure는 어떻게 호출하지? ... 557 핵심 포인트 ... 562 찾아보기 ... 563