Department of Digital Contents Sang Il Park

Slides:



Advertisements
Similar presentations
YES C ์ œ 1 ์žฅ C ์–ธ์–ด์˜ ๊ฐœ์š” 1/34 ์ œ 1 ์žฅ C ์–ธ์–ด์˜ ๊ฐœ์š” ๋ฌธ๋ด‰๊ทผ. YES C ์ œ 1 ์žฅ C ์–ธ์–ด์˜ ๊ฐœ์š” 2/34 ์ œ 1 ์žฅ C ์–ธ์–ด์˜ ๊ฐœ์š” 1.1 ํ”„๋กœ๊ทธ๋žจ๊ณผ C ์–ธ์–ด์˜ ํŠน์ง• 1.2 C ์–ธ์–ด์˜ ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์„ฑ 1.3 ๋น„์ฃผ์–ผ C++ ํ†ตํ•ฉ ํ™˜๊ฒฝ ๋“ค์–ด๊ฐ€๊ธฐ.
Advertisements

๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฉ”์‹œ์ง€ ๋ฐœ์ƒ๋œ ์ด๋ฒคํŠธ์˜ ์ข…๋ฅ˜์™€ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ผ์ข…์˜ ์ƒ์ˆ˜ ๊ฐ’ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ ์œˆ๋„์šฐ ์‹œ์Šคํ…œ Application ์ด๋ฒคํŠธ ๋ฐœ์ƒ ๋ฉ”์‹œ์ง€ ์ „์†ก ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ํ™”๋ฉด์— ์ถœ๋ ฅ.
Computer Graphics ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊น€ ์ฐฝ ํ—Œ๊น€ ์ฐฝ ํ—Œ. Computer Graphics 2 ์œˆ๋„์šฐ ์‹œ์Šคํ…œ ๏‚š ์œˆ๋„์šฐ ๏‚ฌ ์Šคํฌ๋ฆฐ ์œ„์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ์‚ฌ๊ฐํ˜• ์˜์—ญ ๏‚š ์œˆ๋„์šฐ ์‹œ์Šคํ…œ ๏‚ฌ ์œ ์ €์™€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๊ฐ„์˜ ๊ทธ๋ž˜ํ”ฝ ์Šคํฌ๋ฆฐ์„ ํ†ตํ•œ ์ธํ„ฐํŽ˜์ด์Šค ๋ฅผ.
CH5 ๋””๋ฒ„๊ทธ๋ฅผ ํ•ด๋ณด์ž ๋””๋ฒ„๊ทธ ๋””๋ฒ„๊ฑฐ : ์‹คํ–‰์ค‘์ธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ง€์ •ํ•œ ์žฅ์†Œ์—์„œ ์ •์ง€ํ•˜๊ณ , ๊ทธ ์‹œ ์ ์—์„œ ๋ณ€์ˆ˜, ๋ฉ”๋ชจ๋ฆฌ, ์ฝœ ์Šคํƒ์˜ ๋‚ด์šฉ์„ ์ฐธ์กฐํ•˜๋Š”๊ฒƒ์ด ๊ฐ€๋Šฅ Build -> Start Debug -> Go.
Visual C++ Programming Document/View Architecture
์ปดํ“จํ„ฐ ๊ณตํ•™ ์„ค๊ณ„ ๋ฐ ์‹คํ—˜ I MFC programming
2์žฅ. ์œˆ๋„์šฐ์ฆˆ ์ž…์ถœ๋ ฅ 1/211 1.
7์žฅ. MDI ํ”„๋กœ๊ทธ๋ž˜๋ฐ MDI ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋ฐฐ์šฐ๋„๋ก ํ•œ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ๊ฒƒ์€ ์ƒ์„ฑ๋œ ์œˆ๋„์šฐ์— ๋‹จ์ผ ํ™”๋ฉด์ด ์กด์žฌํ•˜๋Š” ํ˜•ํƒœ์˜€๋‹ค. ์ด๊ฒƒ์„ SDI๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  Single Document Interface์˜ ์•ฝ์ž์ด๋‹ค. ํ•˜๋‚˜์˜ ๋ฌธ์„œ๋ฅผ ํ•˜๋‚˜์˜ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ํ˜•ํƒœ์˜.
3. C++์™€ ๊ฐ์ฒด์ง€ํ–ฅ C++ ์ฝ”๋”ฉ ๋ฐฉ๋ฒ• ๊ฐ์ฒด ๋‹จ์œ„๋กœ 2 ๊ฐœ์˜ ํŒŒ์ผ ์ธํ„ฐํŽ˜์ด์Šค ํŒŒ์ผ ๊ตฌํ˜„ํŒŒ์ผ
Vision System Lab, Sang-Hun Han
03์žฅ ์˜์ƒ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Visual C++ ๋””์ง€ํ„ธ ์˜์ƒ ํŒŒ์ผ ํฌ๋งท MFC ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋งˆ๋ฒ•์‚ฌ๋ฅผ ์ด์šฉํ•œ MFC ํ”„๋กœ์ ํŠธ ์ž‘์„ฑ
๋ช…ํ’ˆ C++ 8์žฅ ์ƒ์†.
Windows Programming Chapter 1. Introduction to SDK
์œˆ๋„์šฐ ์šด์˜์ฒด์ œ์™€ ์œˆ๋„์šฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ํŠน์ง•์„ ์ดํ•ดํ•œ๋‹ค.
C++ Espresso ์ œ1์žฅ ๊ธฐ์ดˆ ์‚ฌํ•ญ.
Lecture 2 MFC and Application Frameworks
์ œ1์žฅ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ 1.1 ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐœ๋… 1.2 ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ
Visual C++ Programming Document/View Architecture 3
์ œ1์žฅ ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ 1.1 ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐœ๋… 1.2 ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ
5์žฅ. ๋‹จ์ถ•ํ‚ค์™€ ๋น„ํŠธ๋งต ์œˆ๋„์šฐ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ํ™”๋ฉด์—์„œ ์‚ฌ์šฉ์ž๋“ค์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ ๋“ค์ด๊ณ  ์ถœ๋ ฅ์„ ์œ„ํ•œ ์ฝ”๋“œ ์™ธ ๋ถ€๋ถ„์ด ์กด์žฌํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์„ ์ฃผ๋กœ ๋ฆฌ์†Œ์Šค๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  ์ด๋“ค์€ ์ฃผ๋กœ ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚œ๋‹ค. ๋ฉ”๋‰ด, ํˆด๋ฐ”, ๋น„ํŠธ๋งต, ๋‹จ์ถ•ํ‚ค, ๋Œ€ํ™”์ƒ์ž ๋“ฑ์ด ์—ฌ๊ธฐ์— ์†ํ•œ๋‹ค. ์ด ๋ถ€๋ถ„๋“ค์€ ์šฐ๋ฆฌ์˜ ํ”„๋กœ๊ทธ๋žจ์˜.
๊ฐ•์ขŒ๋ช… : C++ํ”„๋กœ๊ทธ๋ž˜๋ฐ (C++ Programming)
MFC ๋ฐœ์ „ ๊ณผ์ •๊ณผ ์ฃผ์š” ํŠน์ง•์„ ๊ฐœ๊ด„์ ์œผ๋กœ ์ดํ•ดํ•œ๋‹ค.
Department of Digital Contents Sang Il Park
C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋…„ 2ํ•™๊ธฐ ์ „์ž์ •๋ณด๊ณตํ•™๋Œ€ํ•™ ์ปดํ“จํ„ฐ๊ณตํ•™๋ถ€.
์œค ํ™ ๋ž€ MFC ๊ธฐ์ดˆ ์œค ํ™ ๋ž€
์ œ6์žฅ ๊ฐ์ฒด๋ฐฐ์—ด๊ณผ ๋ฒกํ„ฐ ๊ฐ์ฒด ๋ฐฐ์—ด์„ ์ดํ•ดํ•œ๋‹ค. ๋ฒกํ„ฐ(vector) ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
Windows Programming ์‹œ์ž‘ํ•˜๊ธฐ
2์ฃผ ์‹ค์Šต๊ฐ•์˜ Java์˜ ๊ธฐ๋ณธ๋ฌธ๋ฒ•(1) ์ธ๊ณต์ง€๋Šฅ์—ฐ๊ตฌ์‹ค.
8. ๊ฐ์ฒด์™€ ํด๋ž˜์Šค (๊ธฐ๋ณธ).
C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋…„ 2ํ•™๊ธฐ ์ „์ž์ •๋ณด๊ณตํ•™๋Œ€ํ•™ ์ปดํ“จํ„ฐ๊ณตํ•™๋ถ€.
C++ Espresso ์ œ9์žฅ ๋‹คํ˜•์„ฑ.
C++ Espresso ์ œ6์žฅ ์ƒ์„ฑ์ž์™€ ์†Œ๋ฉธ์ž.
Game Programming 03 - Tools of trade
MFC Application Frameworks (AFX)
Visual C++ Programming
2์žฅ ์ž๋ฐ”ํ™˜๊ฒฝ๊ณผ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ 2.1 ์ž๋ฐ” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ 2.2 ์ž๋ฐ” ํ†ตํ•ฉํ™˜๊ฒฝ 2.3 ์ž๋ฐ” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ์• ํ”Œ๋ฆฟ ํ”„๋กœ๊ทธ๋žจ
Visual C++ Programming Output and File
MFC UI for TS Analyzer ์„œ์šธ์‹œ๋ฆฝ๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐํ†ต๊ณ„ํ•™๊ณผ ์ตœ ์šฉ ์ง„.
Visual C++ Programming Common Controls
C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋…„ 2ํ•™๊ธฐ ์ „์ž์ •๋ณด๊ณตํ•™๋Œ€ํ•™ ์ปดํ“จํ„ฐ๊ณตํ•™๋ถ€.
C ++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹œ์ž‘.
๊น€ ์ • ์„ Web Programming ๊น€ ์ • ์„
C++ ๊ฐœ์š” ๊ฐ์ฒด์ง€ํ–ฅ ์œˆ๋„์šฐ์ฆˆ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•œ๊ตญ์„ฑ์„œ๋Œ€ํ•™๊ต ์œ ์ผ์„ 
Visual C++ Programming MFC Programming์˜ ์ดํ•ด
Visual Studio 2010 ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ PCํ™”๋ฉด์—์„œ Visual Studio 2010 ์•„์ด์ฝ˜์„ ๋”๋ธ”ํด๋ฆญ ํ•˜๊ฑฐ๋‚˜
Windows Programming ์‹œ์ž‘ํ•˜๊ธฐ
C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋…„ 2ํ•™๊ธฐ ์ „์ž์ •๋ณด๊ณตํ•™๋Œ€ํ•™ ์ปดํ“จํ„ฐ๊ณตํ•™๋ถ€.
adopted from KNK C Programming : A Modern Approach
์ œ5์žฅ ์ƒ์„ฑ์ž์™€ ์ ‘๊ทผ์ œ์–ด ๊ฐ์ฒด ์ง€ํ–ฅ ๊ธฐ๋ฒ•์„ ์ดํ•ดํ•œ๋‹ค. ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋ž˜์Šค์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
Lab 4 ๋ณด๊ณ ์„œ ๊ต์žฌ 5์žฅ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์˜ˆ์ œ - ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ฐฑ์‹ 
์ปดํ“จํ„ฐ์˜ ๊ธฐ์ดˆ ์ œ 2๊ฐ• - ๋ณ€์ˆ˜์™€ ์ž๋ฃŒํ˜• , ์—ฐ์‚ฐ์ž 2006๋…„ 3์›” 27์ผ.
๊ฐ€์ƒํ•จ์ˆ˜์™€ ์ถ”์ƒ ํด๋ž˜์Šค.
GUI ์†Œ์ผ“ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Chapter 08. * ํ•™์Šต๋ชฉํ‘œ ์œˆ๋„์šฐ GUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์™€ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ด
Chapter3 : ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๊ฐœ๋… 3.1 ๊ฐ์ฒด์ง€ํ–ฅ(object-oriented)๊ณผ
Chap02 ๊ฐ์ฒด ์ง€ํ–ฅ ๊ฐœ๋… 2.1 ๊ฐ์ฒด์ง€ํ–ฅ(object-oriented)๊ณผ ์ ˆ์ฐจ์ง€ํ–ฅ(procedural-oriented)
Lab 9 Guide: ์ธํ„ฐ๋„ท ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ˆ์ œ * ์ผ๋Œ€์ผ ์ฑ„ํŒ… ํ”„๋กœ๊ทธ๋žจ (๊ต์žฌ 27์žฅ, ์ชฝ)
Operating System Multiple Access Chatting Program using Multithread
์ œ8์žฅ ํฌ์ธํ„ฐ์™€ ๋™์ ๊ฐ์ฒด ์ƒ์„ฑ ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•œ๋‹ค. ํฌ์ธํ„ฐ์™€ ๊ด€๋ จ๋œ ์—ฐ์‚ฐ์„ ์ดํ•ดํ•œ๋‹ค.
Chapter 02. ์†Œํ”„ํŠธ์›จ์–ด์™€ ์ž๋ฃŒ๊ตฌ์กฐ.
์ œ 11์žฅ. ํ…œํ”Œ๋ฆฟ๊ณผ STL ํ•™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด๋ฐ์‹ค์Šต (C++).
3์žฅ. ์ œ์–ด ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌํ•˜๊ธฐ 1/211 1.
3์žฅ,4์žฅ ๋ฐœํ‘œ ์„œ์ •์šฐ.
03. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ C++ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ข…๋ฅ˜
์ œ 7์žฅ ์ด๋ฒคํŠธ.
Windows ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ ๋ฐ MFC์˜ ๊ตฌ์กฐ
์ปดํ“จํ„ฐ ๊ณ„์ธก ๋ฐ ์‹ค์Šต C++ ๊ธฐ์ดˆ ์˜๋‚จ๋Œ€ํ•™๊ต ๊ธฐ๊ณ„๊ณตํ•™๋ถ€.
MFC ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ ๋‘ ๊ฐœ์˜ ์œˆ๋„์šฐ๋กœ ๊ตฌ์„ฑ๋œ ์ผ๋ฐ˜์ ์ธ MFC ํ”„๋กœ๊ทธ๋žจ ํ”„๋ ˆ์ž„ ์œˆ๋„์šฐ
์œˆ๋„์šฐ ์šด์˜์ฒด์ œ์™€ ์œˆ๋„์šฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ํŠน์ง• SDK ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ MFC ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ
C++ ์–ธ์–ด์˜ ํŠน์ง•
MFC ๊ธฐ์ดˆ ์œˆ๋„์šฐ ์‘์šฉํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ๊ฐ„๋žตํ•œ ์—ญ์‚ฌ Microsoft Foundation Classes
Presentation transcript:

Department of Digital Contents Sang Il Park MFC ์‹œ์ž‘ํ•˜๊ธฐ Department of Digital Contents Sang Il Park

๊ฐ„๋‹จํ•œ ์ฝ”๋”ฉ ์—ฐ์Šต C++๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ โ€˜1โ€™์„ ์ž…๋ ฅํ•˜๋ฉด โ€œSejong Universityโ€๋ฅผ ์ถœ๋ ฅ โ€˜2โ€™๋ฅผ ์ž…๋ ฅํ•˜๋ฉด โ€œDigital Contentsโ€๋ฅผ ์ถœ๋ ฅ โ€˜3โ€™์„ ์ž…๋ ฅํ•˜๋ฉด โ€œBye~โ€๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒ ์œ„์˜ ๊ณผ์ •์„ ๋ฌดํ•œ ๋ฐ˜๋ณต

๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์˜ˆ Message Message Loop Message Handler #include <iostream> using namespace std; int main() { int i; while(true) cout<<"Input: "; cin>>i; switch(i) case 1: cout<<"Sejong University"<<endl; break; case 2: cout<<"Digital Contents"<<endl; case 3: cout<<"Bye!"<<endl; return 0; default: } Message Loop Message Message Handler

์ข€ ๋” ๋ฉ‹์žˆ๊ฒŒโ€ฆ void procedure(int msg) { switch(msg) case 1: cout<<"Sejong University"<<endl; break; case 2: cout<<"Digital Contents"<<endl; case 3: cout<<"Bye!"<<endl; exit(0); default: } int main() { int i; while(true) cout<<"Input: "; cin>>i; procedure(i); } return 0;

Windows API API (Application Programming Interface) Win32 ์šด์˜์ฒด์ œ ๋“ฑ์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ์•„๋†“์€ Library์˜ ์ผ์ข… ์ฃผ๋กœ C ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๋กœ ๋˜์–ด ์žˆ์Œ. Win32 Windows์šฉ API์˜ ์ด๋ฆ„ ์ฆ‰, ์œˆ๋„์šฐ์—์„œ ๋Œ์•„๊ฐ€๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋ชจ์•„๋†“์€ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ library Ex.) ์ฐฝ๋งŒ๋“ค๊ธฐ, ๋ฒ„ํŠผ ๋‹ฌ๊ธฐ, ๋ฉ”๋‰ด๋งŒ๋“ค๊ธฐ ๋“ฑโ€ฆ

A Simple win32 code // // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // PURPOSE: Processes messages for the main window. // WM_COMMAND - process the application menu // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; switch (message) case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) case IDM_ABOUT: // MessageBox(hWnd, _T("haha"), _T("about"), MB_OK); DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); default: return DefWindowProc(hWnd, message, wParam, lParam); } case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // TODO: Add any drawing code here... RECT rect; GetClientRect(hWnd, &rect); DrawText(hdc, _T("hello, Windows"), -1, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hWnd, &ps); case WM_DESTROY: PostQuitMessage(0); return 0; // Message handler for about box. INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) UNREFERENCED_PARAMETER(lParam); case WM_INITDIALOG: return (INT_PTR)TRUE; if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)FALSE; // // FUNCTION: MyRegisterClass() // PURPOSE: Registers the window class. // COMMENTS: // This function and its usage are only necessary if you want this code // to be compatible with Win32 systems prior to the 'RegisterClassEx' // function that was added to Windows 95. It is important to call this function // so that the application will get 'well formed' small icons associated // with it. ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TESTWIN32)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_TESTWIN32); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx(&wcex); } // FUNCTION: InitInstance(HINSTANCE, int) // PURPOSE: Saves instance handle and creates main window // COMMENTS: // In this function, we save the instance handle in a global variable and // create and display the main program window. BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) HWND hWnd; hInst = hInstance; // Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; // testWin32.cpp : Defines the entry point for the application. // #include "stdafx.h" #include "testWin32.h" #define MAX_LOADSTRING 100 // Global Variables: HINSTANCE hInst; // current instance TCHAR szTitle[MAX_LOADSTRING]; // The title bar text TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name // Forward declarations of functions included in this code module: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: Place code here. MSG msg; HACCEL hAccelTable; // Initialize global strings LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_TESTWIN32, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) return FALSE; } hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN32)); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) TranslateMessage(&msg); DispatchMessage(&msg); return (int) msg.wParam;

Code in short BOOL InitInstance(โ€ฆ) { hWnd = CreateWindow(โ€ฆ); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(โ€ฆ) switch (message) case WM_COMMAND: break; case WM_PAINT: case WM_DESTROY: PostQuitMessage(0); default: return; return 0; int APIENTRY _tWinMain(โ€ฆ) { // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) return FALSE; } // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) if (!TranslateAccelerator(โ€ฆ)) TranslateMessage(&msg); DispatchMessage(&msg); return (int) msg.wParam;

Code in short BOOL InitInstance(โ€ฆ) { hWnd = CreateWindow(โ€ฆ); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } LRESULT CALLBACK WndProc(โ€ฆ) switch (message) case WM_COMMAND: break; case WM_PAINT: case WM_DESTROY: PostQuitMessage(0); default: return; return 0; int APIENTRY _tWinMain(โ€ฆ) { // Perform application initialization: if (!InitInstance (hInstance, nCmdShow)) return FALSE; } // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) if (!TranslateAccelerator(โ€ฆ)) TranslateMessage(&msg); DispatchMessage(&msg); return (int) msg.wParam;

Win32 ํ”„๋กœ๊ทธ๋žจ ๊ตฌ์กฐ WinMain(โ€ฆ) ๏ƒง main ํ•จ์ˆ˜ { InitInstance(โ€ฆ) ๏ƒง ์ดˆ๊ธฐํ™” (ํ‹€์„ ๋งŒ๋“ค๊ณ  ๋ณด์—ฌ์คŒ) while( GetMessage (โ€ฆ)) ๏ƒง ๋ฉ”์‹œ์ง€ ๋ฃจํ”„ DispatchMessage(โ€ฆ) ๏ƒง ๋ฉ”์„ธ์ง€์ฒ˜๋ฆฌ(WinProc) }

MFC ?

MFC ์ฃผ์š” ํŠน์ง• (1/3) ์œˆ๋„์šฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋Š”๋ฐ ๋“œ๋Š” ์ˆ˜๊ณ ๋ฅผ ํฌ๊ฒŒ ๋œ์–ด์ค€๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์žฌ์‚ฌ์šฉ AppWizard, ClassWizard API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋Œ€๋“ฑํ•œ ์†๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ธ๋ผ์ธ ํ•จ์ˆ˜์˜ ํ™œ์šฉ ์ฝ”๋“œ ํฌ๊ธฐ ์ฆ๊ฐ€๋ฅผ ์ตœ์†Œํ™”ํ•œ๋‹ค. ๋™์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™œ์šฉ

MFC ์ฃผ์š” ํŠน์ง• (2/3) API ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ๊ธฐ๋ฐ˜ ์ง€์‹์„ ์žฌํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. API ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค. (์˜ˆ) ReleaseCapture(); C++ ์–ธ์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ธฐ์กด์˜ C ์–ธ์–ด์— ๋น„ํ•ด API๋ฅผ ์ข€๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (์˜ˆ) ์˜ค๋ฒ„๋กœ๋”ฉ ๋ฐ ๋””ํดํŠธ ์ธ์ž

MFC ์ฃผ์š” ํŠน์ง• (3/3) API๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ ๋ณต์žก๋„๊ฐ€ ๋†’์€ ๋ถ€๋ถ„์„ MFC๋ฅผ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ์‡„ ๊ธฐ๋Šฅ ์ง€์›, ํˆด๋ฐ”์™€ ์ƒํƒœ๋ฐ” ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ง€์›, OLE์™€ ์•กํ‹ฐ๋ธŒX, ...

MFC ํ”„๋กœ๊ทธ๋žจ ๋งŒ๋“ค์–ด ๋ณด๊ธฐ

The simplest MFC application Single Document No Document/View architecture support No database support No ActiveX control No Docking toolbar No Initial status bar

MFC ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ƒ์„ฑ (8/8) ์‹คํ–‰

MFC ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ

Look into the codes

C++? CLASS?

C++ ํ–ฅ์ƒ๋œ C C + Class C์˜ ํšจ์œจ์„ฑ + ๊ฐ์ฒด์ง€ํ–ฅ๊ฐœ๋…(object-oriented)

์ ˆ์ฐจ์ง€ํ–ฅ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ๋ฐฐ๊ฒฝ ๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ์ ˆ์ฐจ์ง€ํ–ฅ์˜ ๋น„๊ต ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ์˜ ์žฌ์‚ฌ์šฉ๊ณผ ๋…๋ฆฝ์„ฑ์„ ๊ฐ•์กฐ ์ ˆ์ฐจ์ง€ํ–ฅ (Procedural-Oriented) : ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” procedure/function์œผ๋กœ ๊ตฌ์„ฑ ๊ฐ์ฒด์ง€ํ–ฅ (Object-Oriented) : ๊ฐ์ฒด๋“ค์ด ๋ฉ”์‹œ์ง€(message)๋ฅผ ํ†ตํ•˜์—ฌ ํ†ต์‹ ํ•จ์œผ๋กœ์จ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š”๋‹ค. ๊ฐ ๊ฐ์ฒด๋Š” ๊ณ ์œ ์˜ ์†์„ฑ(attribute)์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ(method)๋กœ ๊ตฌ์„ฑ

์ ˆ์ฐจ์ง€ํ–ฅ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ ๋น„๊ตฌ์กฐ์  ๊ตฌ์กฐ์ /์ ˆ์ฐจ์ง€ํ–ฅ ๊ฐ์ฒด์ง€ํ–ฅ

๊ฐ์ฒด ๊ฐ์ฒด(Object) ํšจ์œจ์ ์œผ๋กœ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•˜์—ฌ, ์‚ฌ๋žŒ๋“ค์ด ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜๋Š” ๋…ผ๋ฆฌ์ ์ธ(๊ฐœ๋…์ ์ธ) ๋‹จ์œ„ ์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„์— ๋Œ€ํ•œ ์†Œํ”„ํŠธ์›จ์–ด์  ํ‘œํ˜„ ๊ด€๋ จ๋œ ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜์˜ ๋ฌถ์Œ ๊ฐ์ฒด์˜ ๊ตฌ์„ฑ ์†์„ฑ์˜ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ์ดํ„ฐ(data) - attribute ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ(function) โ€“ method

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง• ์บก์Šํ™” (encapsulation) ๋‹คํ˜•์„ฑ (polymorphism) ์ƒ์† (inheritance) ๊ฐ๊ฐ์˜ ์˜๋ฏธ์— ๋Œ€ํ•ด ์ง‘์—์„œ ์ฑ…์„ ์ฐพ์•„ ๋ณผ ๊ฒƒ!

๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ๋Š” ๋‹จ์œ„: ๊ตฌ์กฐ์ฒด

๊ตฌ์กฐ์ฒด (structure) ๊ตฌ์กฐ์ฒด: ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ํ‘œํ˜„ ๊ตฌ์กฐ์ฒด ์ด๋ฆ„ ํ•™์ƒ ์ด๋ฆ„ ํ•™๋ฒˆ ์ฃผ์†Œ ์ „ํ™”๋ฒˆํ˜ธ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜

๊ตฌ์กฐ์ฒด์˜ ์ •์˜ ๊ตฌ์กฐ์ฒด์˜ ์ •์˜ struct ๊ตฌ์กฐ์ฒด์ด๋ฆ„ { ๋ฉค๋ฒ„๋ณ€์ˆ˜ํƒ€์ž…1 ๋ณ€์ˆ˜์ด๋ฆ„1; ๋ฉค๋ฒ„๋ณ€์ˆ˜ํƒ€์ž…2 ๋ณ€์ˆ˜์ด๋ฆ„2; ๋ฉค๋ฒ„๋ณ€์ˆ˜ํƒ€์ž…3 ๋ณ€์ˆ˜์ด๋ฆ„3; โ€ฆ };

๊ตฌ์กฐ์ฒด์˜ ์ •์˜ Example) struct student { char name[30]; int number; float grade; };

๊ตฌ์กฐ์ฒด ํƒ€์ž…์˜ ๋ณ€์ˆ˜ ์„ ์–ธ ๊ตฌ์กฐ์ฒด์ด๋ฆ„ ๊ตฌ์กฐ์ฒด๋ณ€์ˆ˜์ด๋ฆ„; struct student { char name[30]; int number; float grade; }; student a, b;

๋ฉค๋ฒ„๋กœ์˜ ์ ‘๊ทผ ๊ตฌ์กฐ์ฒด๋ณ€์ˆ˜์ด๋ฆ„.๋งด๋ฒ„๋ณ€์ˆ˜์ด๋ฆ„ struct score { int korean; int math; }; score a; a.korean = 30; a.math = 80;

๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ณ€์ˆ˜ํ˜•์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ด์„œ ํฌ์ธํ„ฐ๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค struct rectangle { int x,y; int width, height; }; rectangle rc; rectangle * p = &rc;

๊ตฌ์กฐ์ฒด์˜ ๋งด๋ฒ„ ๋ณ€์ˆ˜ ์ ‘๊ทผ ๊ตฌ์กฐ์ฒด๋ณ€์ˆ˜.๋งด๋ฒ„๋ณ€์ˆ˜ ๊ตฌ์กฐ์ฒด์—์„œ๋Š”: ๊ตฌ์กฐ์ฒดํฌ์ธํ„ฐ๋Š”: (*๊ตฌ์กฐ์ฒดํฌ์ธํ„ฐ).๋งด๋ฒ„๋ณ€์ˆ˜ ๊ตฌ์กฐ์ฒดํฌ์ธํ„ฐ->๋งด๋ฒ„๋ณ€์ˆ˜ ๊ตฌ์กฐ์ฒดํฌ์ธํ„ฐ->๋งด๋ฒ„๋ณ€์ˆ˜

๊ตฌ์กฐ์ฒด์˜ ๋งด๋ฒ„ ๋ณ€์ˆ˜ ์ ‘๊ทผ ์˜ˆ struct rectangle { int x,y; int width, height; }; rectangle rc; rectangle * p = &rc; rc.x=10; (*p).x = 10; p->x = 10; ๋ชจ๋‘ ๊ฐ™๋‹ค

๋ฐ์ดํ„ฐ์™€ ๊ทธ ๊ธฐ๋Šฅ์„ ๋ฌถ๋Š” ๋‹จ์œ„:ํด๋ž˜์Šค

ํด๋ž˜์Šค์˜ ์ •์˜ Point ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์˜ˆ // Point ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ๋‹ค. class Point { public: // ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค int x, y; // ๋ฉค๋ฒ„ ํ•จ์ˆ˜ void Print() cout << "( " << x << ", " << y << ")\n"; } };

ํด๋ž˜์Šค์˜ ์ •์˜ Point ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ์˜ˆ

๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ(1) ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ // ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. Point pt1, pt2; pt1.x = 100; pt1.y = 100; pt2.x = 200; pt2.y = 200; // pt1, p2์˜ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•œ๋‹ค. pt1.Print(); pt2.Print();

๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ(2) Print() ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” x, y์˜ ์˜๋ฏธ [21-3]

๋ฉค๋ฒ„ ํ•จ์ˆ˜์˜ ์œ„์น˜ ํด๋ž˜์Šค์˜ ์ •์˜ ๋ฐ”๊นฅ์ชฝ์— ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ ์˜ˆ class Point { public: // ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ int x, y; // ๋ฉค๋ฒ„ ํ•จ์ˆ˜ void Print(); }; void Point::Print() cout << "( " << x << ", " << y << ")\n"; }

์ƒ์„ฑ์ž์™€ ์†Œ๋ฉธ์ž ์ƒ์„ฑ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ์†Œ๋ฉธ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ƒ์„ฑ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ดˆ๊ธฐํ™” ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ๊ธฐ์— ์•Œ๋งž์€ ์žฅ์†Œ์ด๋‹ค. ์†Œ๋ฉธ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์†Œ๋ฉธํ•  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์†Œ๋ฉธ์ž๋Š” ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •๋ฆฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ๊ธฐ์— ์•Œ๋งž์€ ์žฅ์†Œ์ด๋‹ค.

๋””ํดํŠธ ์ƒ์„ฑ์ž(Default Constructors) ๋””ํดํŠธ ์ƒ์„ฑ์ž์˜ ์ถ”๊ฐ€ class Point { public: int x, y; void Print(); Point(); }; Point::Point() x = 0; y = 0; } // ์‹ค์ œ ์‹คํ–‰ ์‹œ.. Point pt; // ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. pt.Print();

์ธ์ž๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž ์ธ์ž๊ฐ€ ์žˆ๋Š” ์ƒ์„ฑ์ž์˜ ์ถ”๊ฐ€ class Point { public: int x, y; void Print(); Point(); Point(int initialX, int initialY); }; Point::Point(int initialX, int initialY) x = initialX; y = initialY; } // ์ค‘๊ฐ„ ์ƒ๋žต Point pt(3, 5); pt.Print();

์†Œ๋ฉธ์ž ์†Œ๋ฉธ์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ• ๋‹นํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ์˜ˆ class DynamicArray { public: int* arr; DynamicArray(int arraySize); ~DynamicArray(); }; DynamicArray::DynamicArray(int arraySize) // ๋™์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. arr = new int [arraySize]; } DynamicArray::~DynamicArray() // ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค. delete[] arr; arr = NULL;

๊ฐ์ฒด์˜ ๋™์ ์ธ ์ƒ์„ฑ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์˜ˆ Point pt(50, 50); Point* p1 = new Point(); // ๋””ํดํŠธ ์ƒ์„ฑ์ž ์‚ฌ์šฉ Point* p2 = new Point(100, 100); // ์ธ์ž์žˆ๋Š” ์ƒ์„ฑ์ž ์‚ฌ์šฉ Point* p3 = new Point( pt); // ๋ณต์‚ฌ ์ƒ์„ฑ์ž ์‚ฌ์šฉ p1->Print(); p2->Print(); p3->Print(); delete p1; delete p2; delete p3;

์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ •ํ•˜๊ธฐ(1) ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ์˜ˆ class AccessControl { public: char publicData; void publicFunc() {}; protected: int protectedData; void protectedFunc() {}; private: float privateData; void privateFunc() {}; }; int main() // ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ฐ ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•ด๋ณด์ž AccessControl ac; ac.publicData = 'A'; // ์„ฑ๊ณต ac.publicFunc(); // ์„ฑ๊ณต ac.protectedData = 100; // ์‹คํŒจ ac.protectedFunc(); // ์‹คํŒจ ac.privateData = 4.5f; // ์‹คํŒจ ac.privateFunc(); // ์‹คํŒจ return 0; } ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ์„ค์ •ํ•˜๋Š” ์˜ˆ

์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ •ํ•˜๊ธฐ(2) ๋ฉค๋ฒ„์˜ ์ ‘๊ทผ ๊ถŒํ•œ ์„ค์ •ํ•˜๊ธฐ ์ ‘๊ทผ ๊ถŒํ•œ ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•œ ์š”์•ฝ (๋’ค์—์„œ ๋”์šฑ ์ž์„ธํžˆ ๋ถ„๋ฅ˜) [21-23] public : ์™ธ๋ถ€์—์„œ์˜ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•œ๋‹ค. protected, private : ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. [21-23]

Homework #1 1. C++์—์„œ ์ƒ์†์ด๋ž€? ๊ฐ€์ƒํ•จ์ˆ˜๋ž€? 2. ํด๋ž˜์Šค ๋””์ž์ธ ๋ฐ ์ƒ์†์˜ ์—ฐ์Šต ์ตœ๋Œ€ํ•œ ์ž์„ธํžˆ, ์„ฑ์‹คํžˆ, ์ž์‹ ์˜ ์–ธ์–ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ค๋ช… ์‹ค์ œ ์ ์ ˆํ•œ ์ž์‹ ๋งŒ์˜ ์˜ˆ(example) 3๊ฐ€์ง€๋ฅผ ๋งŒ๋“ค์–ด ์„ค๋ช… 2. ํด๋ž˜์Šค ๋””์ž์ธ ๋ฐ ์ƒ์†์˜ ์—ฐ์Šต ๋„ํ˜•(shape) class๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ๊ฐํ˜•(rectangle), ์›(circle) class๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ฐ๊ฐ์˜ ํŠน์„ฑ์— ๋งž๋Š” draw()๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด ๋ณธ๋‹ค. ๊ฐ ํด๋ž˜์Šค๋งˆ๋‹ค ์†Œ์ŠคํŒŒ์ผ๊ณผ ํ—ค๋”ํŒŒ์ผ์„ ๊ฐ๊ฐ(!) ๋งŒ๋“ ๋‹ค. ๋™์ž‘ํ•˜๋Š” code๋ฅผ ์ œ์ถœ

Homework #1 ํด๋ž˜์Šค ์ƒ์†์˜ ์—ฐ์Šต MyShape Class ์ •์˜ํ•˜๊ธฐ MyRect Class ์ •์˜ํ•˜๊ธฐ ๋งด๋ฒ„๋ณ€์ˆ˜: float _x,_y ์ƒ์„ฑ์ž: MyShape(float x, float y) ๏ƒŸ _x์™€ _y์˜ ๊ฐ’์„ ์„ค์ • ๋งด๋ฒ„ํ•จ์ˆ˜: void Draw() const ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ ์ถœ๋ ฅ [SHAPE] position = ( โ€˜_x๊ฐ’โ€™, โ€˜_y๊ฐ’โ€™ ) MyRect Class ์ •์˜ํ•˜๊ธฐ MyShape Class๋กœ๋ถ€ํ„ฐ ์ƒ์† ๋งด๋ฒ„๋ณ€์ˆ˜: float _width, _height ์ƒ์„ฑ์ž: MyRect(float x, float y, float w, float h) ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ ์ถœ๋ ฅ [RECTANGLE] position = ( โ€˜_x๊ฐ’โ€™, โ€˜_y๊ฐ’โ€™), size = (โ€˜_widthโ€™, โ€˜_heightโ€™)

Homework #1 ํด๋ž˜์Šค ์ƒ์†์˜ ์—ฐ์Šต MyCircle Class ์ •์˜ํ•˜๊ธฐ MyShape Class๋กœ๋ถ€ํ„ฐ ์ƒ์† ๋งด๋ฒ„๋ณ€์ˆ˜: float _radius ์ƒ์„ฑ์ž: MyCircle(float x, float y, float radius) ๋งด๋ฒ„ํ•จ์ˆ˜: void Draw() const ์•„๋ž˜์™€ ๊ฐ™์€ ๋‚ด์šฉ ์ถœ๋ ฅ [CIRCLE] position = ( โ€˜_x๊ฐ’โ€™, โ€˜_y๊ฐ’โ€™), radius = โ€˜_radiusโ€™

Homework #1 ํด๋ž˜์Šค ์ƒ์†์˜ ์—ฐ์Šต์˜ test - ๋‹ค์Œ๊ณผ ๊ฐ™์€ main ํ•จ์ˆ˜๋ฅผ ์ด์šฉ int main() { MyShape* shapes[5] = {NULL}; shapes[0] = new MyCircle( 100, 100, 50); shapes[1] = new MyRect( 300, 300, 100, 100); shapes[2] = new MyRect( 200, 100, 50, 150); shapes[3] = new MyCircle(100, 300, 150); shapes[4] = new MyRect( 200, 200, 200, 200); for (int i = 0; i < 5; ++i) shapes[i]->Draw(); delete shapes[i]; shapes[i] = NULL; } return 0;

Homework #1 ํด๋ž˜์Šค ๋””์ž์ธ ๋ฐ ์ƒ์†์˜ ์—ฐ์Šต ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋„๋ก ํด๋ž˜์Šค๋ฅผ ๋””์ž์ธํ•˜๋ผ

Homework #1 ์ œ์ถœ ๋ฐฉ๋ฒ•: Moodle ์ œ์ถœ (moodle.sejong.ac.kr) ๋‹ค์Œ์ฃผ ์›”์š”์ผ ์ž์ • (3์›” 21์ผ 23:99)๊นŒ์ง€ 1. ๋ฆฌํฌํŠธ ์ œ์ถœ: ์ „์ž๋ฌธ์„œ(pdf, ๋˜๋Š” doc) 1๋ฒˆ๊ณผ 2๋ฒˆ์— ๋Œ€ํ•ด ์ตœ๋Œ€ํ•œ ์ž์„ธํžˆ ์„ฑ์‹คํžˆ. 2๋ฒˆ์˜ ๊ฒฝ์šฐ ์ž์‹ ์˜ ์‹œํ–‰ ์ฐฉ์˜ค ๊ณผ์ • ๋ฐ ์ž‘์„ฑ ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ํ•  ๊ฒƒ 2. Code ์ œ์ถœ: Project file + source codes๋ฅผ zip์œผ๋กœ ์••์ถ•ํ•˜์—ฌ ์ œ์ถœ (๋””๋ฒ„๊ทธ ํด๋”๋ฅผ ์ง€์šฐ๊ณ  ์ œ์ถœ) ํ…Œ์ŠคํŠธ ์‹œ build๊ฐ€ ์•ˆ๋˜๋ฉด ์ ์ˆ˜ ์—†์Œ Visual Studio .NET 2003, 2005, 2010

Homework #1 ์นœ๊ตฌ๋“ค๊ณผ ํ™œ๋ฐœํ•œ ํ† ์˜์™€ ํ† ๋ก ์€ ๊ถŒ์žฅ ๋‹จ, ๋ณด๊ณ ์„œ๋‚˜ ์ฝ”๋”ฉ์€ ์Šค์Šค๋กœ ํ•  ๊ฒƒ ๋ณด๊ณ ์„œ๋‚˜ code ์˜ Copy ์ ๋ฐœ ์‹œ ์›๋ณธ ์ œ๊ณต์ž์™€ ๋ณต์‚ฌ์ž ๋ชจ๋‘ ์ˆ™์ œ ์ ์ˆ˜ -100%

classes Look into the codes

VC++ Framework CFrameWnd CChildView ์œˆ๋„์šฐ์˜ ํ”„๋ ˆ์ž„(ํ‹€)์„ ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์œˆ๋„์šฐ CWinApp : ์œ„์˜ ๋‘ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฌถ์–ด ์ฃผ๊ณ , ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋™ ์‹œํ‚ด(๋ˆˆ์— ์•ˆ๋ณด์ž„) ๋ฉ”์‹œ์ง€ ๋ฃจํ”„๋ฅผ ๋Œ๋ฆผ

ํ”„๋กœ๊ทธ๋žจ ๋‚ด๋ถ€ ๊ตฌ์กฐ theApp (CSimpleApp : CWinApp) m_pMainFrame (CMainFrame : CFrameWnd) m_wndView (CChildView : CWnd)

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์ˆœ์„œ CSimpleApp theApp; WinMain() // MFC ๋‚ด๋ถ€์— ์ˆจ๊ฒจ์ง { theApp.InitInstance(); // ์ดˆ๊ธฐํ™” theApp.Run(); // ๋ฉ”์‹œ์ง€ ๋ฃจํ”„ theApp.ExitInstance(); // ์ข…๋ฃŒ }

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํด๋ž˜์Šค (1/4) // Simple.h class CSimpleApp : public CWinApp { virtual BOOL InitInstance(); afx_msg void OnAppAbout(); DECLARE_MESSAGE_MAP() };

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํด๋ž˜์Šค (2/4) MFC ๊ธฐ๋ณธ header file์„ ๋ชจ์•„๋†“์Œ #include "stdafx.h" #include "simple.h" #include "MainFrm.hโ€œ // Simple.cpp BEGIN_MESSAGE_MAP(CSimpleApp, CWinApp) ON_COMMAND(ID_APP_ABOUT, OnAppAbout) END_MESSAGE_MAP() CSimpleApp::CSimpleApp() { } CSimpleApp theApp; MFC ๊ธฐ๋ณธ header file์„ ๋ชจ์•„๋†“์Œ // ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์ž์‹ ์— ํ•ด๋‹นํ•˜๋Š” ์ „์—ญ๊ฐ์ฒด

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํด๋ž˜์Šค (3/4) BOOL CSimpleApp::InitInstance() { SetRegistryKey(_T("Local AppWizard-Generated Applications")); CMainFrame* pFrame = new CMainFrame; m_pMainWnd = pFrame; pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL); pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); return TRUE; }

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํด๋ž˜์Šค (3/4) BOOL CSimpleApp::InitInstance() { SetRegistryKey(_T("Local AppWizard-Generated Applications")); CMainFrame* pFrame = new CMainFrame; m_pMainWnd = pFrame; pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL); pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); return TRUE; } 61

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์ˆœ์„œ CSimpleApp theApp; WinMain() // MFC ๋‚ด๋ถ€์— ์ˆจ๊ฒจ์ง { theApp.InitInstance(); // ์ดˆ๊ธฐํ™” theApp.Run(); // ๋ฉ”์‹œ์ง€ ๋ฃจํ”„ theApp.ExitInstance(); // ์ข…๋ฃŒ }

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํด๋ž˜์Šค (4/4) // ๋Œ€ํ™”์ƒ์ž ๊ด€๋ จ ํด๋ž˜์Šค ์„ ์–ธ ๋ฐ ์ •์˜ ๋ถ€๋ถ„ - ์ƒ๋žต // ... void CSimpleApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); }

VC++ Framework CFrameWnd CChildView ์œˆ๋„์šฐ์˜ ํ”„๋ ˆ์ž„(ํ‹€)์„ ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์œˆ๋„์šฐ CWinApp : ์œ„์˜ ๋‘ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฌถ์–ด ์ฃผ๊ณ , ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋™ ์‹œํ‚ด(๋ˆˆ์— ์•ˆ๋ณด์ž„) ๋ฉ”์‹œ์ง€ ๋ฃจํ”„๋ฅผ ๋Œ๋ฆผ

ํ”„๋ ˆ์ž„ ์œˆ๋„์šฐ ํด๋ž˜์Šค (1/5) // MainFrm.h class CMainFrame : public CFrameWnd { protected: DECLARE_DYNAMIC(CMainFrame) virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); virtual ~CMainFrame(); CChildView m_wndView; afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSetFocus(CWnd *pOldWnd); DECLARE_MESSAGE_MAP() };

ํ”„๋ ˆ์ž„ ์œˆ๋„์šฐ ํด๋ž˜์Šค (2/5) // MainFrm.cpp IMPLEMENT_DYNAMIC(CMainFrame, CFrameWnd) BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_CREATE() ON_WM_SETFOCUS() END_MESSAGE_MAP() CMainFrame::CMainFrame() { } CMainFrame::~CMainFrame()

ํ”„๋ ˆ์ž„ ์œˆ๋„์šฐ ํด๋ž˜์Šค (3/5) int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; if (!m_wndView.Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL)) TRACE0("Failed to create view window\n"); } return 0;

ํ”„๋ ˆ์ž„ ์œˆ๋„์šฐ ํด๋ž˜์Šค (4/5) BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; cs.dwExStyle &= ~WS_EX_CLIENTEDGE; cs.lpszClass = AfxRegisterWndClass(0); return TRUE; }

ํ”„๋ ˆ์ž„ ์œˆ๋„์šฐ ํด๋ž˜์Šค (4/5) struct CREATESTRUCT{ LPVOID lpCreateParams; HINSTANCE hInstance; HMENU hMenu; HWND hwndParent; int cy; int cx; int y; int x; LONG style; LPCTSTR lpszName; LPCTSTR lpszClass; DWORD dwExStyle; }; 69

ํ”„๋ ˆ์ž„ ์œˆ๋„์šฐ ํด๋ž˜์Šค (5/5) void CMainFrame::OnSetFocus(CWnd* pOldWnd) { m_wndView.SetFocus(); } BOOL CMainFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo) if (m_wndView.OnCmdMsg(nID, nCode, pExtra, pHandlerInfo)) return TRUE; return CFrameWnd::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);

VC++ Framework CFrameWnd CChildView ์œˆ๋„์šฐ์˜ ํ”„๋ ˆ์ž„(ํ‹€)์„ ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์œˆ๋„์šฐ CWinApp : ์œ„์˜ ๋‘ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฌถ์–ด ์ฃผ๊ณ , ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ๋™ ์‹œํ‚ด(๋ˆˆ์— ์•ˆ๋ณด์ž„) ๋ฉ”์‹œ์ง€ ๋ฃจํ”„๋ฅผ ๋Œ๋ฆผ

๋ทฐ ํด๋ž˜์Šค (1/4) // ChildView.h class CChildView : public CWnd { public: protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual ~CChildView(); afx_msg void OnPaint(); DECLARE_MESSAGE_MAP() };

๋ทฐ ํด๋ž˜์Šค (2/4) // ChildView.cpp CChildView::CChildView() { } BEGIN_MESSAGE_MAP(CChildView,CWnd ) ON_WM_PAINT() END_MESSAGE_MAP()

๋ทฐ ํด๋ž˜์Šค (3/4) BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE; cs.style &= ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass ( CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL); return TRUE; } Style: http://msdn2.microsoft.com/en-us/library/ms632600(VS.85).aspx ExStyle: http://msdn2.microsoft.com/en-us/library/ms632680(VS.85).aspx System Color: http://msdn2.microsoft.com/en-us/library/ms724371.aspx

๋ทฐ ํด๋ž˜์Šค (4/4) void CChildView::OnPaint() { CPaintDC dc(this); dc.TextOut(100, 100, _T("์•ˆ๋…•ํ•˜์„ธ์š”.โ€œ)); }

์š”์•ฝ ํด๋ž˜์Šค ์ข…๋ฅ˜ ๋ฒ ์ด์Šค ํด๋ž˜์Šค ์ด๋ฆ„ ํ•ต์‹ฌ ํ•จ์ˆ˜ - ์ฃผ ์—ญํ•  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ CWinApp InitInstance() - ํ”„๋ ˆ์ž„ ์œˆ๋„์šฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. Run() - ๋ฉ”์‹œ์ง€ ๋ฃจํ”„๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ํ”„๋ ˆ์ž„ ์œˆ๋„์šฐ CFrameWnd OnCreate() - ๋ทฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋ทฐ CWnd OnPaint() - ํ™”๋ฉด์— ์ถœ๋ ฅํ•œ๋‹ค.

Announcement ์—ฐ์Šต์‹œ๊ฐ„ ์ˆ˜์š”์ผ ์˜คํ›„ (6:00~7:30) ์žฅ์†Œ: ์œจ304ํ˜ธ ์‹ค์Šต์‹ค