์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
Win32 API์์ ๋์ด์ด
1. ๊ฐ์[ํธ์ง]
Windows API๋ Microsoft Windows์์ ์ฌ์ฉํ๋ C์ธ์ด ๊ธฐ๋ฐ์ API์ด๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก๋ C์ธ์ด ๊ธฐ๋ฐ์ด์ง๋ง, C++์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์๋์ฐ์์ ์คํ๋๋ ๋ชจ๋ ์ข
๋ฅ์ ์ดํ๋ฆฌ์ผ์ด์
๋ค์ ๋ด๋ถ์ ์ผ๋ก ์ ๋ถ ์ด ์๋์ฐ API ํจ์๋ฅผ ํธ์ถํ๋ ํํ๋ก ๋ฐ๋๋ค.[1]
2. ํน์ง[ํธ์ง]
2.1. ํ๋์จ์ด ๋ ๋ฆฝ์ [ํธ์ง]
๊ณผ๊ฑฐ์ MS-DOS ํ๊ฒฝ์์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ์์คํ
์ ์ฐ๊ฒฐ๋ ์ฅ์น์ ์ข
๋ฅ๋ฅผ ๋ชจ๋ ์์์ผ ํ๋ค. ๊ฐ๋ น ํ์ปด์คํผ์ค ํ๊ธ ๊ฐ์ ์๋ํ๋ก์ธ์๋ฅผ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํด ๋ณด์. ๋ฌธ์ ๊ฐ ๋๋ ๊ฒ์ ๋ชจ๋ํฐ์ ํ๋ฆฐํฐ์ธ๋ฐ, ๊ณผ๊ฑฐ์๋ ์ด ๊ทธ๋ํฝ ์ถ๋ ฅ ์ฅ์น ๋ฐ ํ๋ฆฐํฐ์ ๋ํ ์ ์ด ์ฝ๋๋ฅผ ์ผ์ผ์ด ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ค.[2] ๋ง์ฝ ํ์ฌ๋ ํ๊ต์์ ์ฌ์ฉ ์ค์ธ ์๋ ํ๋ก์ธ์๊ฐ ํ๊ต์ ์๋ ํ๋ฆฐํฐ์ ๋ง์ถ์ด ์ค์ ๋์ด ์๋ค๊ณ ์๊ฐํ์ฌ ๋ณด์. ๋๊ตฐ๊ฐ๊ฐ ์ธ๊ตญ์์ ํ๋ฆฐํฐ ์ข์ ๊ฑฐ ์๋ค๊ณ ํด์ ์ฌ ์๋๋ฐ, ์ฌ์ฉ์ค์ธ ์๋ ํ๋ก์ธ์์์ ์ง์ํ์ง ์๋ ํ๋ฆฐํฐ๋ผ๋ฉด ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๊ฑฐ๋, ํน์ ์๋ํ๋ก์ธ์์์ ์ฌ์ฉ์ ์ ์๋ก ํ๋ฆฐํฐ๋ฅผ ์ค์ ํ ์ ์๋ค๋ฉด, ํ๋ฆฐํฐ ๋งค๋ด์ผ์ ๊บผ๋ด๋ค๊ณ , ํ๋ ํ๋ ์ ์ด์ฝ๋๋ฅผ ๋ง์ถ์ด ์๋ํ๋ก์ธ์์ ์ธ์์ํค๋ฉด ๋๋ค. ๊ท์ฐฎ๊ณ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ๋ฟ์ด์ง ํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ด์์ผ๋ฏ๋ก ์๋ฌด๋ ๋ถ๋ง์ด ์์๋ค.
๊ทธ๋ฌ๋ Windows ํ๊ฒฝ์์๋ ์ด๋ฐ ํ๋์จ์ด ์ ์ด ์ฝ๋๋ ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๊ฐ ๊ฐ์ ธ๊ฐ๊ฒ ๋๋ฉฐ, ๋ฌธ์ ์ถ๋ ฅ์ DrawText ๋๋ TextOut ํจ์ ํธ์ถ๋ก ํํ์ ๋๋ด๊ฒ ๋๋ค. ๊ผญ ๋ฌธ์ ์ถ๋ ฅ๋ฟ๋ง ์๋๋ผ ๊ฑฐ์ ๋ชจ๋ ๊ฒ ์ด๋ฐ ์์ผ๋ก ํ๋์จ์ด์ ์ข ๋ฅ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค. ๊ฑฐ๊พธ๋ก ์๋์ฐ ํ๊ฒฝ์ผ๋ก ๋์ด์ค๋ฉด์ ํ๋์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ์ง์ ๊ฑด๋๋ ค ์ ์ดํ๋ ๋ฐฉ์์ ์์ฉ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ์์ ํ ์ฌ์ฅ๋์๋ค.[3] ์๋์ฐ์์๋ ํ๋์ ์ด์์ฒด์ ์์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์๋ํ๋ ๋ฉํฐํ์คํน ๋ฐ ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ Windows ํ๊ฒฝ์์๋ ์ด๋ฐ ํ๋์จ์ด ์ ์ด ์ฝ๋๋ ๋๋ฐ์ด์ค ๋๋ผ์ด๋ฒ๊ฐ ๊ฐ์ ธ๊ฐ๊ฒ ๋๋ฉฐ, ๋ฌธ์ ์ถ๋ ฅ์ DrawText ๋๋ TextOut ํจ์ ํธ์ถ๋ก ํํ์ ๋๋ด๊ฒ ๋๋ค. ๊ผญ ๋ฌธ์ ์ถ๋ ฅ๋ฟ๋ง ์๋๋ผ ๊ฑฐ์ ๋ชจ๋ ๊ฒ ์ด๋ฐ ์์ผ๋ก ํ๋์จ์ด์ ์ข ๋ฅ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค. ๊ฑฐ๊พธ๋ก ์๋์ฐ ํ๊ฒฝ์ผ๋ก ๋์ด์ค๋ฉด์ ํ๋์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ์ง์ ๊ฑด๋๋ ค ์ ์ดํ๋ ๋ฐฉ์์ ์์ฉ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ์์ ํ ์ฌ์ฅ๋์๋ค.[3] ์๋์ฐ์์๋ ํ๋์ ์ด์์ฒด์ ์์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์๋ํ๋ ๋ฉํฐํ์คํน ๋ฐ ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
2.2. ๋์ ๋งํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ[ํธ์ง]
์๋์ฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ผญ ํ์ํ ๊ธฐ๋ฅ๋ค์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๊ฐ ์๋ DLL ํํ๋ก ๋ง๋ค์ด ์๋์ฐ ์ด์์ฒด์ ์์ ๋ด์ฅ์์ผ ๋์๋๋ฐ, ๋ณดํต %SystemRoot%\System32 ๊ฒฝ๋ก์ ๊ฐ ๋ณด๋ฉด ์ด๋ฐ DLL๋ค์ ์ฐพ์๋ณผ ์ ์๋ค. ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๋์ ์ผ๋ก ๋ถ๋ ค์ค๋ DLL์ ํน์ง์, ํ๋ก๊ทธ๋จ์ ํ ๋ฒ ์ง ๋์ผ๋ฉด ์๋์ฐ ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ๋ฉด์ ์๋์ฐ DLL์ด ๊ฐ์ ๋๋ ๊ฒฝ์ฐ ๊ทธ์ ๋ง๊ฒ ํ๋ก๊ทธ๋จ ๊ธฐ๋ฅ๋ ๊ฐ์ ๋๊ฒ ๋๋ค. ํ์ง๋ง ํธํ์ฑ์ด ๋ฌธ์
์์ฃผ ์ฌ์ฉํ๋ DLL์ ๋ค์๊ณผ ๊ฐ๋ค.
์์ฃผ ์ฌ์ฉํ๋ DLL์ ๋ค์๊ณผ ๊ฐ๋ค.
- kernel32.dll: ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ํ์ผ ์ /์ถ๋ ฅ, ํ๋ก๊ทธ๋จ ๋ก๋/์คํ ๋ฑ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์๋ค. Windows NT ๋ถํฐ๋ Kernel32.dll์ ํธ๋จํด๋ฆฐ ์ญํ ๋ง์ ํ๋ฉฐ ์ค์ ๊ธฐ๋ฅ์ ntdll.dll์ด ๊ฐ์ง๊ณ ์๋ค. (Kernel32.dll โ KernelBase.dll โ ntdll.dll)[4]
- gdi32.dll : ํ๋ฉด/ํ๋ฆฐํฐ์ ๊ทธ๋ํฝ ์ถ๋ ฅ์ ๊ด๋ฆฌํ๋ค.
- user32.dll : ์๋์ฐ[5], ๋ํ ์์, ๋ฉ๋ด ๋ฑ์ ๊ด๋ฆฌํ๋ค.
2.3. ๋ฉ์์ง ์ฒ๋ฆฌ[ํธ์ง]
MS-DOS ํ๊ฒฝ์ด๋ ์ฝ์ ์์ฉ ํ๋ก๊ทธ๋จ์์๋ ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ด ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ฑํ ์ฝ๋์ ๋ฐ๋ผ์ ์์ง์๋ค๋ฉด, ์๋์ฐ์์๋ ํ๋ก๊ทธ๋จ ์ธ๋ถ์์ ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ค์ ๋ฉ์์ง์ ํํ๋ก ์ ๋ฌ๋ฐ์ ๊ฐ์ฒด์๊ฒ ์๋ ค ์ค๋ค. ํ๋์จ์ด ์ด๋ฒคํธ[6]๊ฐ ๋ฐ์ํ๋ฉด, ์๋์ฐ์ ์์คํ
๋ฉ์์ง ํ์ ์ด๊ฒ์ด ์์ด๊ฒ ๋๊ณ , ์์คํ
๋ฉ์์ง ํ์ ๋ค์ด์จ ๋ฉ์์ง๋ฅผ ์ด์์ฒด์ ๊ฐ ํด๋นํ๋ ๊ฐ์ฒด์ ๋ฉ์์ง ํ์ ๋ฃ์ด ์ค๋ค. ํ๋ก๊ทธ๋จ์ while๋ฌธ์ ๋๋ฉด์ ๊ณ์ ๋ฉ์์ง๋ฅผ ์ฝ์ด์, switch-caseํด์ ์ด๋ค ๋ฉ์์ง๊ฐ ์ค๋ฉด ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋ค๋ ๋ก์ง์ ๊ธฐ์ ํ๋ ํํ๋ฅผ ๊ฐ์ง๋ค. ๋ฉ์ธ์ง๋ 3๊ฐ์ง์ ๊ฐ์ด ์ ์ฅ๋์ด ์์ผ๋ฉฐ ๋ฉ์ธ์ง๋ฅผ ๊ตฌ๋ณํ๊ธฐ ์ํ ์ซ์ ๋ฐ์ดํฐ, ์ถ๊ฐ ๋ฐ์ดํฐ 2๊ฐ์ ์ซ์ ๋ฐ์ดํฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.[7]
์ถ๊ฐ์ ์ผ๋ก ๋งํ๋ฉด ํํ OS๋ฅผ ๋งํ๋ ์๋์ฐ๊ฐ ์๋๋ผ UI๊ฐ์ฒด๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์์์ ์๋์ฐ๋ผ๊ณ ๋ถ๋ฅด๊ฒ ๋๋๋ฐ ์ด UI๊ฐ์ฒด๋ ๋ชจ๋ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ ์ ์๋ค. UI๊ฐ์ฒด๋ ๋ฒํผ, ์ด๋ฏธ์ง, ์ฐฝ ๋ฑ UI๋ฅผ ๊ตฌ์ฑํ๋ ๋ชจ๋ ๋ถ๋ถ์ด ๋๋์ด์ ธ ์์ผ๋ฉฐ ์๋ฅผ ๋ค์ด์ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ๋ฒํผ์ ํด๋ฆญํ๊ฒ ๋๋ค๋ฉด OS๊ฐ ํ๋ก๊ทธ๋จ์๊ฒ ์ด๋๋ถ๋ถ์ ๋ง์ฐ์ค๊ฐ ๋๋ฆผ ์ด๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ฒ ๋๊ณ ํ๋ก๊ทธ๋จ์ ํด๋น ๋ฉ์ธ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ์ขํ๊ฐ์ ๊ณ์ฐํด์ ํด๋น ์์น์ UI๊ฐ์ฒด๊ฐ ์๋ค๋ฉด ํด๋น UI๊ฐ์ฒด์๊ฒ ๊ทธ ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌํ๋ค. ๋ฒํผ์ ํด๋ฆญํ๋ค๊ณ ํ์ผ๋ ํด๋น ๋ฒํผ์๊ฒ ๋ฉ์ธ์ง๊ฐ ์ ๋ฌ๋๊ฒ ๋๊ณ ํด๋น ๋ฒํผ์์ ํด๋ฆญ์ ํด์ผ๋ ์ผ์ ํ๊ฒ ๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ๋งํ๋ฉด ํํ OS๋ฅผ ๋งํ๋ ์๋์ฐ๊ฐ ์๋๋ผ UI๊ฐ์ฒด๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์์์ ์๋์ฐ๋ผ๊ณ ๋ถ๋ฅด๊ฒ ๋๋๋ฐ ์ด UI๊ฐ์ฒด๋ ๋ชจ๋ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์ ์ ์๋ค. UI๊ฐ์ฒด๋ ๋ฒํผ, ์ด๋ฏธ์ง, ์ฐฝ ๋ฑ UI๋ฅผ ๊ตฌ์ฑํ๋ ๋ชจ๋ ๋ถ๋ถ์ด ๋๋์ด์ ธ ์์ผ๋ฉฐ ์๋ฅผ ๋ค์ด์ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ๋ฒํผ์ ํด๋ฆญํ๊ฒ ๋๋ค๋ฉด OS๊ฐ ํ๋ก๊ทธ๋จ์๊ฒ ์ด๋๋ถ๋ถ์ ๋ง์ฐ์ค๊ฐ ๋๋ฆผ ์ด๋ผ๋ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ฒ ๋๊ณ ํ๋ก๊ทธ๋จ์ ํด๋น ๋ฉ์ธ์ง์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ์ขํ๊ฐ์ ๊ณ์ฐํด์ ํด๋น ์์น์ UI๊ฐ์ฒด๊ฐ ์๋ค๋ฉด ํด๋น UI๊ฐ์ฒด์๊ฒ ๊ทธ ๋ฉ์ธ์ง๋ฅผ ์ ๋ฌํ๋ค. ๋ฒํผ์ ํด๋ฆญํ๋ค๊ณ ํ์ผ๋ ํด๋น ๋ฒํผ์๊ฒ ๋ฉ์ธ์ง๊ฐ ์ ๋ฌ๋๊ฒ ๋๊ณ ํด๋น ๋ฒํผ์์ ํด๋ฆญ์ ํด์ผ๋ ์ผ์ ํ๊ฒ ๋๋ค.
2.4. ์ปค๋ ์ค๋ธ์ ํธ (Kernel Object)[ํธ์ง]
ํธ๋ค(Handle) ๋๋ ์ปค๋ ์ค๋ธ์ ํธ(Kernel Object) ๋ ์๋์ฐ์์ ์ค๋ธ์ ํธ์ ๋ถ์ฌ ์ฃผ๋ ์ซ์๋ก, ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์์ผ ์๋ ์๊ณ , ์์คํ
์ด ์ ์ญ์ผ๋ก ์๋ณํ๊ธฐ ์ํด ๋ถ์ธ ๋ฒํธ์ผ ์๋ ์๋ค. ์ด๋ค ์ค๋ธ์ ํธ๋ ์ฃผ์์ ์๋ฏธ๋ฅผ, ์ด๋ค ์ค๋ธ์ ํธ๋ ๋ฒํธ์ ์๋ฏธ๋ฅผ ๊ฐ๋๋ค.[8] ํธ๋ค์ ๊ฐ๊ฐ์ ์๋์ฐ, ๋ธ๋ฌ์, ํ, ํ์ผ, ํ๋ก์ธ์ค, ์ค๋ ๋ ๋ฑ ๊ฑฐ์ ๋ชจ๋ ์ค๋ธ์ ํธ์ ๋ถ๊ฒ ๋๋ค.
2.5. ๋ฆฌ์์ค[ํธ์ง]
์๋์ฐ ํ๋ก๊ทธ๋จ์ ์ง๋ค ๋ณด๋ฉด ๋ฉ๋ด, ๋ํ ์์(๋ค์ด์ผ๋ก๊ทธ ๋ฐ์ค), ์์ด์ฝ, ๋นํธ๋งต ์ด๋ฏธ์ง, ์ปค์ ๋ฑ์ ๋ง์ด ์ฌ์ฉํ๋ค. ๊ทธ๋ฌ๋ ์๋ค๋ค์ ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๋ง์ด ์ก์๋จน๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ์ฌ ๋ ์๋ค๋ค์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ถ ๋ค ์ฌ๋ผ์๋ฒ๋ฆฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํฐ์ ธ๋๊ฐ๊ฒ(...) ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ๊ฒ๋ค์ ๋ฆฌ์์ค๋ก ์ทจ๊ธํ๋ฉฐ, ๋ฆฌ์์ค ์ปดํ์ผ๋ฌ๋ฅผ ํตํด ํ๋ก๊ทธ๋จ ์ฝ๋์๋ ๋ณ๊ฐ๋ก ์ปดํ์ผ๋๊ณ , ์ด๋ค์ ์ฌ์ฉํ ๋๋ LoadMenu, LoadIcon, LoadBitmap, LoadCursor ๋ฑ์ ํจ์๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋๋ค. ํ๋ก๊ทธ๋จ ์คํ ์ค ์ฌ์ฉํ์ง ์๋ ๋ฆฌ์์ค๋ ๋ฉ๋ชจ๋ฆฌ์์ ์๋์ผ๋ก ๋ด๋ ค๊ฐ๋ค.
3. Hello, Windows ํ๋ก๊ทธ๋จ[ํธ์ง]
3.1. ๋ฉ์์ง ๋ฐ์ค[ํธ์ง]
์ด ํ๋ก๊ทธ๋จ์ ์๋ฌด ์์ด์ฝ๋ ์๊ณ , ํ์ธ ๋ฒํผ์ด ํ๋ ์กด์ฌํ๋ ๋ฉ์์ง ๋ฐ์ค์ "Hello, Windows!"๋ฅผ ์ถ๋ ฅํ๋ค.
#include <tchar.h>
#include <windows.h>
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL, TEXT("Hello, Windows!"), TEXT("Hello"), MB_OK);
return 0;
}3.2. ์๋์ฐ[ํธ์ง]
์ด ํ๋ก๊ทธ๋จ์ ํฐ์ ๋ฐํ์ ํด๋ผ์ด์ธํธ ์์ญ์ ์ ์ค์์ GDI๋ฅผ ์ฌ์ฉํด "Hello, Windows!"๋ฅผ ์ถ๋ ฅํ๋ ์๋์ฐ๋ฅผ ํ๋ ๋์ด๋ค.
#include <tchar.h>
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
static TCHAR szAppName[] = TEXT("HELLOWINDOWS");
HWND hWnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;
if (!RegisterClass(&wndclass))
{
MessageBox(NULL, TEXT("This program requires Windows 2000 or upper."),
szAppName, MB_OK | MB_ICONERROR);
return 0;
}
hWnd = CreateWindow(szAppName, TEXT("Hello Windows Application"),
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
RECT rect;
switch (message)
{
case WM_CREATE:
return 0;
case WM_PAINT:
hDC = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rect);
DrawText(hDC, TEXT("Hello, Windows!"), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}4. ๊ด๋ จ ๋ฌธ์[ํธ์ง]
[1] MFC, ๋น์ฃผ์ผ ๋ฒ ์ด์, ๋ธํ์ด ๋ฑ ์๋์ฐ์์ ์ฌ์ฉํ ์ ์๋ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์คํ ์ ์ ๋ถ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ๋ ๋ณํ์ ๊ฑฐ์น๊ฒ ๋๋ค.
[2] ํํ๋ฆฌ์ค, CGA, EGA, VGA๊ฐ์ ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ์ ๊ฐ๊ฐ์ ํ๋ฆฐํฐ์ ๋ํ ์ ์ด ์ฝ๋๋ฅผ ์ผ์ผ์ด ๋ค ๋ง๋ค์ด์ ์๋ํ๋ก์ธ์ ํ๋ก๊ทธ๋จ ์์ ๋ด์ฅ์์ผ ์ฃผ์ด์ผ ํ๋ค.
[3] ๋ค๋ง ์ฐ์
์ฉ์ผ๋ก ISA ๋ฒ์ค ๋ฑ ํ๋์จ์ด๋ฅผ ์ง์ ๊ฑด๋๋ ค์ผ ํ๋ ๊ณณ์์๋ ์ฌ์ ํ ์ฌ์ฉํ๋ค. ์์ฉํ๋ก๊ทธ๋จ์ด ์๋ ๋๋ผ์ด๋ฒ ๊ฐ๋ฐ์ ํ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง.
[4] ๋๋ถ๋ถ์ ํจ์๋ ntoskrnl.exe์์ ๊ตฌํ๋๋ฉฐ, ์ด๋ค์ ntdll.dll๋ฅผ ํตํด์ ์ฌ์ฉ์ ๋ชจ๋์ ๋
ธ์ถ๋๋ค. ntdll.dll๋ ์์คํ
์ฝ ์ญํ ์ ํ๋ฉฐ, ๋ค์ดํฐ๋ธ ํจ์๊ฐ ํธ์ถ๋ ๊ฒฝ์ฐ ์ปค๋๋ชจ๋์ ๋ค์ด๊ฐ์ SSDT๋ฅผ ํตํด ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง ntoskrnl.exe์ ํจ์๋ฅผ ํธ์ถํ๋ค.
[5] "์ฐฝ"์ ์๋ฏธ๋ก ์ฌ์ฉํ๋ ๊ทธ ์๋์ฐ๋ฅผ ์๋ฏธํ๋ค.
[6] ์ฌ์ฉ์๊ฐ ํค๋ณด๋๋ฅผ ๋๋ฅด๊ฑฐ๋ ๋ง์ฐ์ค๋ฅผ ์์ง์๋ค๊ฑฐ๋, ๊ธฐํ ์ฌ๋ฌ ๊ฐ์ง์ ์์ํ ์ด๋ฒคํธ๋ฅผ ์๋ฏธํ๋ค.
[7] ์๋ฅผ ๋ค์ด์ ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ๋ฉด ๋ฉ์ธ์ง๋ก, ๋ง์ฐ์ค ํด๋ฆญ ์ด๋ฒคํธ ๋ฉ์ธ์ง, x์ขํ, y์ขํ๋ผ๊ณ ๋ฉ์ธ์ง๊ฐ ๋ ๋ผ์จ๋ค.
[8] ํน์ ์ข
๋ฅ์ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ๋ฆฌํค๋ ํธ๋ค์ด ์ฃผ์์ธ์ง ๋ฒํธ์ธ์ง๋ ๋ง์ดํฌ๋ก์ํํธ์์ ๊ณต์์ ์ผ๋ก ๋ฌธ์ํํ์ง ์์๋ค. ์ฆ ์ธ์ ๋ ๋ฐ๋ ์ ์๋ค.