1 / 37

Win32 Programing

Win32 Programing. 2007. 5. 25 ( 금 ) 김 희 준 icemichy@hufs.ac.kr. Contents. Window Programming Architecture 메시지 처리와 창 출력 자식 창 처리 리소스 처리. Window Programming Architecture. API(Appication Programming Interface) 예제프로젝트 윈도우 프로그램 구조의 특징 SDK61.cpp 파일 분석. API (Appication Programming Interface).

lali
Download Presentation

Win32 Programing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Win32 Programing 2007. 5. 25 (금) 김 희 준 icemichy@hufs.ac.kr

  2. Contents • Window Programming Architecture • 메시지 처리와 창 출력 • 자식 창 처리 • 리소스 처리

  3. Window Programming Architecture • API(Appication Programming Interface) • 예제프로젝트 • 윈도우 프로그램 구조의 특징 • SDK61.cpp 파일 분석

  4. API (Appication Programming Interface) • 자원 사용을 위해 운영체제에게 서비스를 요청할 때 서비스 요청과 관련하여 응용 프로그램에서 지켜야 할 규칙 • DOS / UNIX : 자신만의 API를 지원하는 OS로 설계 • 윈도우계열OS : 여러 API를 지원하는 OS로 설계 • Windows NT : DOS API, Win16 API, Win32 API, POSIX(Portable Operating System Interface) OS/2 Console API 등 여러 종류의 API들을 지원 • 주의사항: 프로그램 내에서는 한가지 API만으로 응용프로그램을 작성해야 함

  5. Example Project • Win32 API 함수를 사용하여 응용프로그램 작성 • Example • 프로그램은 창을 가지며, 창 중앙에 "Hello! Win32 API Program"라는 문자열을 출력

  6. Example Project • 개발과정 Prototype Creation • ( APPlication 선택 대화상자 A Typical “Hello World!” application 선택) Prototype Modification

  7. Example Project • File 메뉴에서 New -> Projects(Win32 Application ) • Name 및 Location 입력 • 클 릭

  8. Example Project • Win32 Application 대화상자에서 A Typical "Hello World!" application를 선택 • 클 릭

  9. Example Project • New Project Information 대화상자에서 OK 버튼을 클릭 • 클 릭

  10. Example Project • Build 메뉴의 Rebuild All 서브메뉴 선택 • Execute 서브메뉴 선택

  11. Example Project • Workspace Window 프로그램을 실제로 진행시키는 응용 프로그램의 소스 파일 Dialog 목록 대화상자 자원 Icon 목록 아이콘으로 사용되는 아이콘 비트맵 자원 Menu 목록 메뉴 자원 Resource Files 목록 프로젝트에 사용되는 자원 파일 String Table 목록 프로젝트에서 사용되는 문자열 자원 External Dependencies 목록 프로젝트에서 사용되는 프로젝트 바깥의 파일 목록

  12. Example Project • SDK61.cpp

  13. Example Project

  14. Example Project

  15. Example Project

  16. Example Project

  17. Example Project

  18. Example Project • Prototype Modification • SDK61.cpp 파일의 메인 창인 윈도우 ProcedureWnd_Proc 함수의 WM_PAINT case 레이블에서 문자열을 출력하는 부분 변경 • 출력되는 문자열의 내용을 “Hello! Win32 API program”으로 변경 DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER ) ; DrawText(hdc, szHello, strlen(szHello), &rt, DT_SINGLELINE | DT_CENTER | DT_VCENTER ) ; 리소스 뷰 페이지의 String Table 목록 ID가 IDS_HELLO인자원을 더블 클릭 Caption : 상자의 내용을 원하는 문자열로 편집 Hello! Win32 API program

  19. Example Project • Build 메뉴의 Rebuild All 서브메뉴 선택 • Execute 서브메뉴 선택

  20. 윈도우 프로그램의 구조의 특징 • 윈도우 프로그램은 WinMain 함수와 나머지 구성 요소들로 이루어짐 • 대부분의 윈도우 프로그램은 자신의 창을 가지는 데, 이때의 창은 보통 메인 창과 여러 개의 자식 창으로 구성됨 • 메인 창의 경우 창의 속성을 운영체제에게 등록한 후 사용하여야 함 • 자식 창들 중에서 메뉴바, 툴바, 대화상자 등은 창의 모습을 리소스로 처리 • 창의 제어와 관련하여 프로그램 소스는 창의 모습을 관리하는 부분과 창을 통해 이루어지는 입력과 출력을 수행하는 부분 나뉨 • 응용프로그램은 입력 장치를 공유해야 하기 때문에 사건중심으로 작성 되어야 함 ( 즉 윈도우 프로그램의 수행 흐름의 논리적인 구조는메시지 루프와 윈도우 프로 시듀어로 구성됨) • 출력 장치를 공유 하여야 하므로 GDI(Graphic Device Interface) 서비스를 사용하여 출력을 수행

  21. SDK61.cpp 파일 분석 • 프로그램은 WinMain 함수와 나머지 함수 즉 MyRegisterClass, InitInstance, WndProc, About 등 4개의 함수로 구성 • MyRegisterClass 함수 • 프로그램이 사용하는 메인 창의 속성을 운영체제에게 등록하는 함수 (1) WNDCLASS(EX) 구조형 변수를 준비하고, 이 변수에 메인 창의 속성 정보들을 기록한다. (2) RegisterClass(EX) API 함수를 사용하여 속성 정보를 운영 체제에게 등록하는 데, (1)에서 준비된 구조체를 사용하여야 한다. (3) WNDCLASSEX 구조체의 멤버 중에서 lpfnWndProc 멤버는 메인 창에서 발생하는 메시지에 대한 메시지 처리루틴의 주소를 가지고 있어야 한다.

  22. SDK61.cpp 파일 분석 • InitInstance 함수 • 창을 만들고 이를 화면에 띄우고 그리고 창의 내용을 조정하는 작업

  23. SDK61.cpp 파일 분석 • CreateWindow API 함수의 주요 매개변수

  24. SDK61.cpp 파일 분석 • WndProc 함수와 About 함수 • 메인 창과 대화상자 창에 대한 메시지 처리루틴 (윈도우 프로시듀어) (1) 창의 핸들, 메시지 id, 메시지의 wParam, 메시지의 IParam 등을 매개변수로 가져야 한다. (2) 창이 만들려 질 때 해당 함수의 주소가 창의 속성 정보들 중의 1개로 반드시 등록되어야 한다.

  25. SDK61.cpp 파일 분석 • Main Window의 Message 처리 루틴

  26. SDK61.cpp 파일 분석 • About 대화상자 창의 메시지 처리 루틴

  27. SDK61.cpp 파일 분석 • WinMain 함수 • 문자중심 프로그램의 main 함수와 비슷한 역할을 수행하는 함수 • 메시지 루프(Message Loop)를 구현하여 프로그램 수행의 흐름을 주도

  28. 메시지 처리와 창 출력 • 예제 프로젝트 실습 • 입력 처리 • 출력처리 • SDK62.cpp

  29. Example Project • 메인 창의 상단에 사각형이 그려지고 창 중앙에 문자열이 출력 • 마우스 왼쪽 버튼과 오른쪽 버튼 입력 그리고 키 입력 등 외부 입력 장치로부터의 입력에 대한 이를 알리는 메시지들이 출력됨 • 또한 이러한 문자열은 Shift 키를 누르면 조금 뒤에 사라지는 데, Shift 키의 이와 같은 기능을 알리는 문자열도 창에 출력됨

  30. Example Project • 입력 처리 • WndProc 함수에서 처리

  31. Example Project • 출력처리 • GDI 서비스를 사용하여 WndProc 함수의 WM_PAINT case 레이블에서 수행 • 창에 출력을 수행할 DC(Device Context)장치를 생성 하고 이전 DC가 사용하던 환경들을 저장 • 출력에 사용될 글꼴, 펜, 붓, 비트맵 등등의 출력 도구들을 생성 hdc = BeginPaint(hWnd, &ps) ;

  32. Example Project • 출력처리 • 기타 출력 환경들을 세팅 • 출력 도구들을 DC에게 연결 SetTextColor(hdc, RGB(0,0,10)) ; //글자 색 세팅 SetBkColor(hdc, RGB(0,255,1)) ; //배경 색 세팅 //출력 도구들을 DC(Device Context)에게 전달 SelectObject(hdc, Font) ; SelectObject(hdc, Pen) ; SelectObject(hdc, Brush) ;

  33. SDK62.cpp

  34. SDK62.cpp

  35. SDK62.cpp

  36. SDK62.cpp

  37. SDK62.cpp

More Related