1. DC๋, Device Context
- ๊ทธ๋ํฝ ์ถ๋ ฅ์ ํ์ํ ๋ชจ๋ ์ต์
์ ๋ชจ์๋์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด๋ก, ์๋์ฐ์ฆ์์๋ ์ถ๋ ฅ์ฅ์น์ ๋ฌด์์ธ๊ฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด์๋ ๋ฐ๋์ DC๊ฐ ํ์ํ๋ค. ๋ณดํต DCํธ๋ค์ ์ป์ ํ ์ถ๋ ฅํ๋ค.(DCํธ๋ค์ ์ถ๋ ฅ๋์์ ๋ํ๋ด๋ ๊ตฌ๋ถ ๋ฒํธ๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.) ๋ชจ๋ ๊ทธ๋ํฝ ํจ์๋ค์ ์ฒซ๋ฒ์งธ ์ธ์๋ก DCํธ๋ค์ ํ์๋ก ํ๋ค.
- GDI์ ์ํด ๊ด๋ฆฌ๋๋ค.
(GDI๋ ๊ทธ๋ํฝ ํจ์๋ค์ ๊ตฌํํ๋ ์ผ์ ๋ด๋นํ๋ ์๋์ฐ์ฆ์ ๊ตฌ์ฑ์์์ด๋ค. ๊ทธ๋ํฝ ์ถ๋ ฅ์ ์ํ์ฌ ์์ฉํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ ์ ์๋ ํจ์์ ๊ทธ์ ๊ด๋ จ๋ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค.)
- ์ฆ, ํฐํธ/์์/๊ตต๊ธฐ/์ถ๋ ฅ๋ฐฉ๋ฒ๋ฑ์ด ๋ชจ๋ ์ถ๋ ฅ์ ํ์ํ ์ ๋ณด์ด๋ฏ๋ก ๊ทธ๋ฌํ ์ ๋ณด๋ค์ด DC์ ๋ค ๋ด๊ฒจ ์๋ค๊ณ ๋ณผ ์ ์๋ค.
๊ด๋ จ ์ฝ๋:
hdc = GetDC(hWnd); //!< GetDC๋ก ํ์ฌ DC ํธ๋ค๊ฐ์ ๊ฐ์ ธ์จ๋ค.
2. BeginPaint vs GetDC
WM_PAINT๊ฐ ์๋ ๋ฉ์์ง์์ DC๋ฅผ ์ป๊ธฐ ์ํ ํจ์๋ GetDC()์ด๋ค. GetDC()๊ฐ ํ ๋นํ DC ๊ตฌ์กฐ์ฒด๋ฅผ ํด์ ํ๋ ํจ์๋ ReleaseDC()์ด๋ค.
WM_PAINT์์ DC๋ฅผ ์ป๊ธฐ ์ํด ํธ์ถํด์ผ ํ๋ ํจ์๋ BeginPaint()์ด๋ค. BeginPaint()๊ฐ ํ ๋นํ DC ๊ตฌ์กฐ์ฒด๋ฅผ ํด์ ํ๋ ํจ์๋ EndPaint()์ด๋ค.
์ด๋ฌํ ์ฐจ์ด์ ์ GetMessage() ๋ฐ WM_PAINT์ ๋ฌดํจํ ์์ญ ํน์ฑ๊ณผ ๊ด๋ จ์ด ์๋ค.
GetMessage()๋ ๋๋ถ๋ถ ๋ฉ์์ง ํ์์ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ค๊ณ ํ์์ ๋ฉ์์ง๋ฅผ ์ง์ด๋ค.
ํ์ง๋ง WM_PAINT๊ฒฝ์ฐ์๋ ๋ฉ์์ง๋ฅผ ํ์์ ์ง์ฐ์ง ์๋๋ค.
ํ์์ WM_PAINT ๋ฉ์์ง๋ฅผ ์ง์ฐ๋ ์ผ์ ๊ทธ๋ฆฌ๊ธฐ๊ฐ ์์๋๋ ์ง์ , ์ฆ BeginPaint()์์ ํ๋ค.
GetDC()๋ ๋จ์ํ๊ฒ ์๋์ฐ์ DC๋ฅผ ์ป์ด์ค๊ธฐ๋ง ํ๋ ํจ์์ด๋ค. GetDC()-ReleaseDC()๋ ๋ฌดํจํ ์์ญ์๋ ๊ด์ฌํ์ง ์๊ณ ์ค์ง DC๋ง ์ป์๋ค ๋๋ ค์ค๋ค.
๊ทธ๋์ ์ถ๋ ฅ์ ์ฃผ๋ก WM_PAINT ๋ฉ์์ง๊ฐ ํธ์ถ๋ ๋ ๋ชจ์์ ํ๋ค.
WM_PAINT ๋ฉ์์ง๋ ํด๋น ์๋์ฐ๊ฐ ๋ค์ ๊ทธ๋ ค์ ธ์ผ ํ ํ์๊ฐ ์์ ๋(=๋ฌดํจํ ์์ญ์ด ๋ฐ์ํ๋ค๊ณ ๋งํ๋ค) ๋ฉ์์ง ํ ๋งจ ๋์ (post)๋ถ์ฌ์ง๋ค.
๋ฌดํจํ ์์ญ ๋๋ฌธ์ BeginPaint()๋ฅผ ์จ์ DC๋ฅผ ์ป์ด ํ๋ฉด์ ํ์ํ ์ถ๋ ฅ์ ํ ๋ค์ EndPaint()๋ก ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ๋ง์น๊ฒ ๋๋ฉด,
ํด๋น ์๋์ฐ์ ์ค์ ๋ ๋ฌดํจํ ์์ญ์ด ํด์ ๋์ด ์๋์ฐ ์ ์ฒด๊ฐ ์ ํจํ ๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก, ํ๋ฉด์ ์ถ๋ ฅ์ ๋ด๋นํ๋ ์ฝ๋๋ WM_PAINT ๋ด์ ์์ฑํ๊ณ ,
์ถ๋ ฅํ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ฉด ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ํ์ InvalidateRect() ํจ์๋ฅผ ํธ์ถํด์ฃผ์ด ์๋์ฐ ์ ์ฒด๋ฅผ ๋ฌดํจํ์์ญ์ผ๋ก ๋ง๋ค์ด ์ค์ผ๋ก์จ WM_PAINT ๋ฉ์์ง๊ฐ ๋ฐ์ํ๊ฒ ๋๊ณ ํ๋ฉด์ด ๋ค์ ๊ทธ๋ ค์ง๋ ํํ๋ก ํ๋ก๊ทธ๋จ์ด ์์ฑ๋๋ค.
'C++ > win api' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Win api] CreateWindow (0) | 2021.05.30 |
|---|---|
| [Win api] InvalidateRect vs updatewindow (0) | 2021.05.30 |