윈도우즈 운영체제 기반의 프로그램 개발에 대해 소개하는 세미나 입니다. 02학번들에게 많은 도움 되었으면 좋겠습니다. ---- [[TableOfContents]] ---- === 윈도우즈 운영체제 === * 32비트 운영체제 * 멀티태스킹 지원 * 멀티스래딩 지원 === 서브시스템 === * Console 서브시스템 - 텍스트 모드 에플리케이션 운영 * '''Windows 서브시스템 - GUI 모드 에플리케이션 운영'''[[BR]] (앞으로 Windows 서브시스템 기반의 프로그래밍을 윈도우즈 프로그래밍이라고 하겠다.) * Native 서브시스템 - 디바이스 드라이버 운영 * Windows CE 서브시스템 - Windows CE 에플리케이션 운영 * POSIX 서브시스템 - POSIX 에플리케이션 운영 === 윈도우즈 프로그래밍 === * 표준 사용자 인터페이스 제공 (["DevelopmentinWindows/UI"]) * 메시지 구동 방식 * 하드웨어 독립적 프로그래밍 * 윈도우즈 API * MFC * 리소스 * DLL * 윈도우즈 데이터 타입 * 헝가리언 표기법 === 메시지 구동 방식 === * 프로그램이 순차적으로 실행되지 않고 메시지 발생에 따라 실행이 되는 방식 http://zeropage.org/~lsk8248/wiki/Seminar/DevelopmentinWindows/Message.jpg === 하드웨어 독립적 프로그래밍 === http://zeropage.org/~lsk8248/wiki/Seminar/DevelopmentinWindows/Hardware.jpg * 하드웨어를 신경쓰지 않고 프로그래밍 할 수 있다. === 윈도우즈 API와 MFC === * 윈도우즈 API (Application Program Interface) * 윈도우즈 프로그래밍을 하기 위해 필요한 함수들을 제공 * 세부적인 것들을 모두 다룰 수 있지만 너무 복잡해서 사용하기 어렵다. * MFC (Microsoft Foundation Class library) * 윈도우즈 API를 클래스로 포장하여 제공하는 클래스 라이브러리 * 윈도우즈 API 만큼 세부적인 것들을 모두 다룰 수는 없지만 윈도우즈 API 보다 사용하기 쉽다. * AppWizard, ClassWizard 등의 툴과의 통합으로 더욱 쉽게 사용할 수 있다. === 리소스 === * 실행파일에 붙여지는 바이너리 데이터 * 아이콘, 커서, 메뉴, 다이얼로그 박스, 비트맵, 폰트, 엑셀레이터 테이블, 스트링 테이블, 버전 정보 등 === DLL === * Static-Link Library[[BR]] http://zeropage.org/~lsk8248/wiki/Seminar/DevelopmentinWindows/SLL.jpg * Dynamic-Link Library[[BR]] http://zeropage.org/~lsk8248/wiki/Seminar/DevelopmentinWindows/DLL.jpg * 코드를 여러 프로그램에서 공유하므로 메모리를 절약할 수 있다. * 윈도우즈 프로그래밍에서는 대부분의 라이브러리가 DLL로 제공된다.[[BR]] (윈도우즈 API - kernel32.dll, gdi32.dll, user32.dll[[BR]] MFC - mfc42.dll[[BR]] OpenGL - gl32.dll, glu32.dll[[BR]] DirectX - dplay.dll, dsound.dll, dinput.dll, ddraw.dll) === 윈도우즈 데이터 타입 === ||데이터 타입||의미|| ||BOOL||TRUE 또는 FALSE 값만 가질 수 있다.|| ||BYTE||unsigned char|| ||CHAR||signed char|| ||DOUBLE||double|| ||DWORD||unsigned long|| ||FLOAT||float|| ||HANDLE||핸들|| ||INT||signed int|| ||LONG||signed long|| ||LPARAM||메시지 파라미터|| ||LPCSTR||NULL 문자로 끝나는 문자열 상수 포인터|| ||LPSTR||NULL 문자로 끝나는 문자열 포인터|| ||SHORT||signed short|| ||UINT||unsigned int|| ||WORD||unsigned short|| ||WPARAM||메시지 파라미터|| === 헝가리언 표기법 === * 함수명 * 일반적으로 "동사 + 목적어" 또는 "동사 + 보어" 로 만들고 각 단어의 첫글자는 대문자로 나머지는 소문자로 쓴다. * 윈도우를 만드는 함수는 CreateWindow, 메시지를 보내는 함수는 SendMessage * 변수명 ||접두어||의미|| ||a||배열|| ||b 또는 f||BOOL 타입의 변수|| ||by||BYTE 타입의 변수|| ||c||카운터로 사용되는 변수|| ||ch||CHAR 타입의 변수|| ||dbl||DOUBLE 타입의 변수|| ||h||HANDLE 타입의 변수|| ||n 또는 i||INT 타입의 변수|| ||l||LONG 타입의 변수|| ||p & lp||포인터 변수|| ||s||문자열|| ||sz||NULL로 끝나는 문자열|| ||u||UINT 타입의 변수|| ||w||WORD 타입의 변수|| ||dw||DWORD 타입의 변수|| === 윈도우즈 API를 이용한 예제 프로그램 === * ["DevelopmentinWindows/APIExample"] - 소스 보기 * http://zeropage.org/~lsk8248/wiki/Seminar/DevelopmentinWindows/API.zip - 다운 받기 === MFC를 이용한 예제 프로그램 === * ["DevelopmentinWindows/MFCExample"] - 소스 보기 * http://zeropage.org/~lsk8248/wiki/Seminar/DevelopmentinWindows/MFC.zip - 다운 받기 === 참고자료 === * MSDN === Thread === ---- ["데블스캠프2002"], [5인용C++스터디]