์์ ์์ค
https://github.com/eazuooz/WindowAPI/tree/b4b7c45e0fd88ddcb056783c49a9640ed6260501
GitHub - eazuooz/WindowAPI
Contribute to eazuooz/WindowAPI development by creating an account on GitHub.
github.com
ํค๋ ํ์ผ
์ฐ์ ์ ์ผ ์ฒซํ์ ๋ณด๋ฉด windows.h ํ๋๋ง ์ธํด๋ฃจ๋ ๋์ด์๋ค.
๋์ค์์๋ ์ฌ์ฉํ๋ ํจ์์ ๋ฐ๋ผ ์ฌ๋ฌ๊ฐ์ ํค๋ ํ์ผ์ ํฌํจํ์ง๋ง ์๋์ฐ์ฆ์์๋ ํ๋์ ํค๋ ํ์ผ์ ๋ชจ๋ API
ํจ์๋ค์ ์ํ๊ณผ ์ฌ์ฉํ๋ ์์๋ค์ ์ฃ๋ค ์ ์ํ๊ณ ์๊ธฐ ๋๋ฌธ์ windos.h๋ง ํฌํจํด์ฃผ๋ฉด ๋๋ค.
windows.h ํค๋ํ์ผ์ ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ํ์ , ํจ์ ์ํ๋ฑ์ ์ ์ํ๋ฉฐ ๊ทธ ์ธ ํ์ํ ํค๋ ํ์ผ์ ํฌํจํ๊ณ ์๋ค.
๊ทธ๋์ ์๋์ฐ์ฆ ํ๋ก๊ทธ๋จ์ ์ฒซ ์ค์ ๊ฑฐ์ ํญ์ include <windows.h>๋ก ์์๋๋ค.
์์์
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
๋ค์์ผ๋ก dos ํ๋ก๊ทธ๋จ๊ณผ ์ฐจ์ด๋๋ ์ ์ ์์์ ์ธ entry point๊ฐ mainํจ์๊ฐ ์๋๋ผ WinMain์ด๋ผ๋ ์ ์ด๋ค.
์๋์ฐ์ฆ ํ๋ก๊ทธ๋จ์ ์์์ ์ main์ด ์๋ WinMain์ด๋ค.
winMain์ 4๊ฐ์ ์ธ์๋ฅผ ์ทจํ๋๋ฐ ๊ฐ ์ธ์์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ธ์ | ์๋ฏธ |
hInstance | ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค ํธ๋ค (ํ๋ก์ธ์ค ID) |
hPrevInstance | ๋ฐ๋ก ์์ ์คํ๋ ํ์ฌ ํ๋ก๊ทธ๋จ์ ์ธ์คํด์ค ํธ๋ค. ์์ ๊ฒฝ์ฐ๋ NULL์ด ๋๋ฉฐ WIN32์์๋ ํญ์ NULL์ด๋ค. ํธํ์ฑ์ ์ํด์๋ง ์กด์ฌํ๋ ์ธ์์ด๋ฏ๋ก ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค. |
lpCmdLine | ๋ช ๋ นํ์ผ๋ก ์ ๋ ฅ๋ ํ๋ก๊ทธ๋จ ์ธ์์ด๋ค. ๋์ค์ argv์ธ์์ ํด๋นํ๋ค. |
nCmdShow | ํ๋ก๊ทธ๋จ์ด ์คํ๋ ํํ์ด๋ฉฐ ์ต์ํ, ๋ณดํต๋ชจ์ ๋ฑ์ด ์ ๋ฌ๋๋ค. |
์ด์ค hInstance ์ธ์๋ ์ ์ฌ์ฉ๋์ง ์๋๋ค. ์ธ์คํด์ค๋ผ๋ ๋ง์ ํด๋์ค๊ฐ ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ๊ตฌํ๋ ์ค์ฒด๋ฅผ ์๋งํ๋ค.
์๋์ฐ์ฆ์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ๊ฐ์ ํ๋ก๊ทธ๋จ์ด ๋์์ ์คํ๋๋ ๋ฉํฐํ์คํน ์์คํ ์ผ ๋ฟ๋ง ์๋๋ผ ํ๋์ ํ๋ก๊ทธ๋จ์ด ์ฌ๋ฌ ๋ฒ ์คํ๋ ์๋ ์๋ค. ์ด๋ ์คํ๋๊ณ ์๋ ๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ์ ํ๋ก๊ทธ๋จ ์ธ์คํด์ค๋ผ๊ณ ํ๋ฉฐ ๊ฐ๋จํ ์ค์ฌ์ ์ธ์คํด์ค๋ผ๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด ๋ฉ๋ชจ์ฅ์ด ๋ค์๊ณผ ๊ฐ์ด ๋๋ฒ ์คํ ๋์ด ์๋ค๊ณ ํด ๋ณด์.
์ด๋ ๋ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋ฉ๋ชจ์ฅ์ด์ง๋ง ์ด์์ฒด์ ๋ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ผ๋ก ์ธ์ํ๋ค.
์ด๋ ๊ฐ ๋ฉ๋ชจ์ฅ์ ์๋ก ๋ค๋ฅธ ์ธ์คํด์ค ํธ๋ค์ ๊ฐ์ง๋ฉฐ ์ด์์ฒด์ ๋ ์ด ์ธ์คํด์ค ํธ๋ค๊ฐ์ผ๋ก ๋๊ฐ์ ๋ฉ๋ชจ์ฅ์ ์๋ก ๊ตฌ๋ณํ๋ค.
hInstance๋ ํ๋ก๊ทธ๋จ ์์ฒด๋ฅผ ์ผ์ปซ๋ ์ ์๊ฐ์ด๋ฉฐ APIํจ์์์ ์์๋ก ์ฌ์ฉ๋๋ค.
lpszClass๋ผ๋ ์ ์ญ ๋ฌธ์์ด์ด ์ ์๋์ด ์๋๋ฐ ์ด ๋ฌธ์์ด์ ์๋์ฐ ํด๋์ค๋ฅผ ์ ์ํ๋๋ฐ ์ฌ์ฉ๋๋ค.
๋ฉ์ธ์ง ์ฒ๋ฆฌ ํจ์
์ด ํ๋ก๊ทธ๋จ์ ์์ธํ ๋ณด๋ฉด ๋๊ฐ์ ํจ์๋ง ์๋ค. ํ๋๋ ํ๋ก๊ทธ๋จ์ ์์์ ์ธ winMain์ด๋ฉฐ ๋๋จธ์ง ํ๋๋ WndProc์ด๋ค.
๋์ค์์๋ main ํจ์๋ง์ผ๋ก๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ง๋ง ์๋์ฐ์ฆ์์๋ ์์ฃผ ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ ์ด ๋๊ฐ์ ํจ์๊ฐ ๋ชจ๋ ์์ด์ผ ํ๋ค.
winMain์์๋ ์๋์ฐ๋ฅผ ๋ง๋ค๊ณ ํ๋ฉด์ ์ถ๋ ฅํ๊ธฐ๋ง ํ ๋ฟ์ด๋ฉฐ ๋๋ถ๋ถ์ ์ผ์ WndProc์์ ์ด๋ฃจ์ด ์ง๋ค.
winMain์ ํ๋ก๊ทธ๋จ์ ์์์ํค๊ธฐ๋ง ํ๋ฉฐ ์ค์ง์ ์ธ ์ฒ๋ฆฌ๋ ๋๋ถ๋ถ WndProc์์ ์ด๋ฃจ์ด์ง๋ค.
winMain ์ ๋์ฒด์ ์ผ๋ก ํญ์ ์ผ์ ํ ์ฝ๋๋ก ๋์ด์์ง๋ง wndProc์ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ผ์ ์ฒ์ฐจ๋ง๋ณ๋ก ๋ฌ๋ผ์ง๋ค.
๊ทธ๋์ ์์ค๋ฅผ ๋ถ์ ํ ๋ ์ฃผ์๊น๊ฒ ๋ด์ผํ ๋ถ๋ถ์ main์ด ์๋๋ผ proc์ด๋ค.
์๋์ฐ ํด๋์ค
winMainํจ์์์ ๊ฐ์ฅ ์ค์ํ ์ผ์ ์๋์ฐ๋ฅผ ๋ง๋๋ ์ผ์ด๋ค.
์๋์ฐ๊ฐ ์์ด์ผ ์ฌ์ฉ์๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ์ ์ ์๊ณ ์ถ๋ ฅ์ ๋ณด์ฌ์ค ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์๋์ฐ๋ฅผ ๋ง๋๋ ค๋ฉด ์๋์ฐ
ํด๋์ค๋ฅผ ๋จผ์ ๋ฑ๋กํํ CreateWindowํจ์๋ฅผ ํธ์ถํด์ผ ํ๋ค. ๋ชจ๋ ์๋์ฐ๋ ์๋์ฐ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง๋ฉฐ
์๋์ฐ ํด๋์ค๋ ๋ง๋ค์ด์ง ์๋์ฐ์ ์ฌ๋ฌ๊ฐ์ง ํน์ฑ์ ์ ์ํ๋ค.
typedef struct tagWNDCLASS
{
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
} WNDCLASS;
style
์๋์ฐ์ ์คํ์ผ์ ์ ์ํ๋ค. ์ฆ ์๋์ฐ๊ฐ ์ด๋ค ํํ๋ฅผ ๊ฐ์ง ๊ฒ์ธ๊ฐ๋ฅผ ์ง์ ํ๋ ๋ฉค๋ฒ์ด๋ค. ์ด ๋ฉค๋ฒ๊ฐ ๊ฐ์ง ์ ์๋ ๊ฐ์ ๋ฌด์งํ๊ฒ ๋ง์ง๋ง ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๊ฐ์ด CS_HREDRAW์ CS_VREDRAW์ด๋ค. ์ด ๋ ๊ฐ์ OR ์ฐ์ฐ์(|)๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํ๋ค. ์ด ๊ฐ๋ค์ ์๋ฏธ๋ ์๋์ฐ์ ์์ง(๋๋ ์ํ) ํฌ๊ธฐ๊ฐ ๋ณํ ๊ฒฝ์ฐ ์๋์ฐ๋ฅผ ๋ค์ ๊ทธ๋ฆฐ๋ค๋ ๋ป์ด๋ค. ์ด๋ฐ์๋ ๋ง์ ๊ฐ์ด ์ฌ ์ ์๋ค.
lpfnWndProc
์ด ๋ฉค๋ฒ๋ ์๋์ฐ์ ๋ฉ์์ง ์ฒ๋ฆฌ ํจ์๋ฅผ ์ง์ ํ๋ค. ๋ฉ์์ง๊ฐ ๋ฐ์ํ ๋๋ง๋ค ์ฌ๊ธฐ์ ์ง์ ํ ํจ์๊ฐ ํธ์ถ๋๋ฉฐ ์ด ํจ์๊ฐ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ฉ์์ง ์ฒ๋ฆฌ ํจ์์ ์ด๋ฆ์ ๋ฌผ๋ก ๋ง์๋๋ก ์ ํ ์ ์์ง๋ง ๊ฑฐ์ WndProc์ผ๋ก ์ ํด์ ธ ์๋ ํธ์ด๋ค.
์ฐธ๊ณ | WinMain ํจ์๋ ํ๋ก๊ทธ๋จ์ ์์์ ์ด๋ฏ๋ก ๋์ค์์ ์์์ ์ด ๋ฐ๋์ main์ด์ด์ผ ํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฆ์ด ๊ณ ์ ๋์ด ์๋ค. ํ์ง๋ง ๋ฉ์์ง ์ฒ๋ฆฌ ํจ์์ธ WndProc๋ ์ฌ์ฉ์๊ฐ ์์๋ก ์ด๋ฆ์ ์ ํ ์ ์๋ ํจ์์ด๋ค. ๊ทธ๋ฌ๋ ๊ด์ต์ ์ํด ์ด ํจ์์ ์ด๋ฆ์ WndProc์ผ๋ก ๊ณ ์ ๋์ด ์์ผ๋ฏ๋ก ์ด ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ๊ด์ต์ด๋ ์ค๋ ์ธ์๋์ ๋ง์ ๋๋ํ ์ฌ๋์ ์ํด ๊ฐ์ฅ ๋ง์ฝ์๋ ํํ๋ก ๊ตณ์ด์ง ๊ฒ์ด๋ฏ๋ก ์ด๊ฒจ๋ด์ผ ๋๋ณด๋ค ์ค์ด ๋ ๋ง๋ค. |
cbClsExtra, cbWndExtra
์ผ์ข ์ ์์ฝ ์์ญ์ด๋ค. ์๋์ฐ์ฆ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ ์์ฃผ ํน์ํ ๋ชฉ์ ์ ์ฌ์ฉ๋๋ ์ฌ๋ถ์ ๊ณต๊ฐ์ด๋ค. ์์ฝ ์์ญ์ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ๋ 0์ผ๋ก ์ง์ ํ๋ค.
þhInstance
์ด ์๋์ฐ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ์ ๋ฒํธ์ด๋ฉฐ ์ด ๊ฐ์ WinMain์ ์ธ์๋ก ์ ๋ฌ๋ hInstance๊ฐ์ ๊ทธ๋๋ก ๋์ ํด์ฃผ๋ฉด ๋๋ค.
hIcon, hCursor
์ด ์๋์ฐ๊ฐ ์ฌ์ฉํ ๋ง์ฐ์ค ์ปค์์ ์ต์ํ๋์์ ๊ฒฝ์ฐ ์ถ๋ ฅ๋ ์์ด์ฝ์ ์ง์ ํ๋ค. LoadCursor ํจ์์ LoadIcon ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ ํ๋ค. ์ฌ์ฉ์๊ฐ ์ง์ ์์ด์ฝ๊ณผ ์ปค์๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ ์๋ ์์ง๋ง ์ฌ๊ธฐ์๋ ์๋์ฐ์ฆ๊ฐ ๋ํดํธ๋ก ์ ๊ณตํ๋ ์์ด์ฝ๊ณผ ์ปค์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค. ์ปค์๋ ์ข์ธก์ผ๋ก ๊ธฐ์ธ์ด์ง ํ์ดํ ๋ชจ์์ด๋ฉฐ ์์ด์ฝ์ ์๋์ ๊ฐ์ ๋ชจ์์ ๊ฐ์ง๋ค.
hbrBackground
์๋์ฐ์ ๋ฐฐ๊ฒฝ ์์์ ์ง์ ํ๋ค. ์ข ๋ ์ ํํ๊ฒ ํํํ๋ฉด ์๋์ฐ์ ๋ฐฐ๊ฒฝ ์์์ ์ฑ์ํ ๋ธ๋ฌ์๋ฅผ ์ง์ ํ๋ ๋ฉค๋ฒ์ด๋ค. GetStockObject๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ฐ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ธ๋ฌ์๋ฅผ ์ง์ ํ๋ค. ์ง์ ํ ์ ์๋ ๋ธ๋ฌ์์๋ ์ฌ๋ฌ ๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ง๋ง ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํฐ์ ๋ฐฐ๊ฒฝ(WHITE_BRUSH)์ด ๋ง์ด ์ฌ์ฉ๋๋ค.
lpszMenuName
์ด ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉํ ๋ฉ๋ด๋ฅผ ์ง์ ํ๋ค. ๋ฉ๋ด๋ ํ๋ก๊ทธ๋จ ์ฝ๋์์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ๋ฆฌ์์ค ์๋ํฐ์ ์ํด ๋ณ๋๋ก ๋ง๋ค์ด์ง ํ ๋งํฌ์์ ๊ฐ์ด ํฉ์ณ์ง๋ค. ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ ์ด ๋ฉค๋ฒ์ NULL์ ๋์ ํด ์ฃผ๋ฉด ๋๋ค.
lpszClassName
์๋์ฐ ํด๋์ค์ ์ด๋ฆ์ ์ ์ํ๋ค. ์ฌ๊ธฐ์ ์ง์ ํ ์ด๋ฆ์ CreateWindow ํจ์์ ์ ๋ฌ๋์ด์ง๋ฉฐ CreateWindow ํจ์๋ ์๋์ฐ ํด๋์ค์์ ์ ์ํ ํน์ฑ๊ฐ์ ์ฐธ์กฐํ์ฌ ์๋์ฐ๋ฅผ ๋ง๋ ๋ค. ์๋์ฐ ํด๋์ค์ ์ด๋ฆ์ ๋ณดํต ์คํ ํ์ผ์ ์ด๋ฆ๊ณผ ์ผ์น์์ผ ์์ฑํ๋ฉฐ ์ด ์์ ์ ๊ฒฝ์ฐ lpszClass ๋ฌธ์์ด์ "First"๋ฅผ ๋์ ํ ํ ์ด ๋ฌธ์์ด์ ์๋์ฐ ํด๋์ค ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ์๋ค.
๋ฉค๋ฒ์ ์๊ฐ ๋๋ฌด ๋ง์ ํ๋ฒ์ ๋ค ์ตํ๊ธฐ ํ๋ค๊ฒ ์ง๋ง ์ด ์ค์ ์ ์ผ ์ค์ํ ๋ฉค๋ฒ๋ ์๋์ฐ ํด๋์ค์ ์ด๋ฆ์ ์ ์ํ๋ lpszClassName๊ณผ ๋ฉ์์ง ์ฒ๋ฆฌ ํจ์๋ฅผ ์ง์ ํ๋ lpfnWndProc์ด๋ค. ์๋์ฐ ํด๋์ค๋ฅผ ์ ์ํ ํ RegisterClass ํจ์๋ฅผ ํธ์ถํ์ฌ ์๋์ฐ ํด๋์ค๋ฅผ ๋ฑ๋กํ๋ค.
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEXW 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_WINDOWAPI));
wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_WINDOWAPI);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
return RegisterClassExW(&wcex);
}
RegisterClass ํจ์์ ์ธ์๋ก wndClass ๊ตฌ์กฐ์ฒด์ ๋ฒ์ง๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ๋๋ค. ์ด๋ฐ ํน์ฑ์ ๊ฐ์ง ์๋์ฐ๋ฅผ ์์ผ๋ก ์ฌ์ฉํ๊ฒ ๋ค๋ ๋ฑ๋ก ๊ณผ์ ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ํ์ ๋ฑ๋ก๋ ์๋์ฐ๋ก ์๋์ฐ๋ฅผ ์์ฑํด์ฃผ์ด์ผ ํ๋ค.
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
hInst = hInstance; // ์ธ์คํด์ค ํธ๋ค์ ์ ์ญ ๋ณ์์ ์ ์ฅํฉ๋๋ค.
HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
lpszClassName
์์ฑํ๊ณ ์ ํ๋ ์๋์ฐ์ ํด๋์ค๋ฅผ ์ง์ ํ๋ ๋ฌธ์์ด์ด๋ค. ์์์ ์ ์ํ WndClass๊ตฌ์กฐ์ฒด์ lpszClassName ๋ฉค๋ฒ์ ์ด๋ฆ์ ์ฌ๊ธฐ์ ๊ธฐ์ ํด ์ค๋ค. ์ฐ๋ฆฌ์ ์์ ์์๋ lpszClass ๋ฌธ์์ด์ ์๋์ฐ ํด๋์ค ์ด๋ฆ์ ๊ธฐ์ต์์ผ ๋์์ผ๋ฏ๋ก ์ด ๋ฌธ์์ด์ ๊ทธ๋๋ก ๋๊ฒจ์ฃผ๋ฉด ๋๋ค.
lpszWindowName
์๋์ฐ์ ํ์ดํ ๋ฐ์ ๋ํ๋ ๋ฌธ์์ด์ด๋ค. ์ฌ๊ธฐ์ ์ง์ ํ ๋ฌธ์์ด์ด ์๋์ฐ์ ํ์ดํ ๋ฐ์ ๋ํ๋๋ค. ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ง์๋๋ก ์ง์ ํ ์ ์๋๋ฐ ์ด ์ฑ ์์๋ ์์ ์ ํ๋ก์ ํธ๋ช (lpszClass ์ ์ญ ๋ฌธ์์ด)์ ํ์ดํ ๋ฐ์ ๋ํ๋ด๊ณ ์๋ค.
dwStyle
๋ง๋ค๊ณ ์ ํ๋ ์๋์ฐ์ ํํ๋ฅผ ์ง์ ํ๋ ์ธ์์ด๋ค. ์ผ์ข ์ ๋นํธ ํ๋๊ฐ์ด๋ฉฐ ๊ฑฐ์ ์์ญ๊ฐ๋ฅผ ํค์๋ฆฌ๋ ๋งคํฌ๋ก ์์๋ค์ด ์ ์๋์ด ์๊ณ ์ด ์์๋ค์ OR์ฐ์ฐ์๋ก ์ฐ๊ฒฐํ์ฌ ์๋์ฐ์ ๋ค์ํ ํํ๋ฅผ ์ง์ ํ๋ค. ์๋์ฐ๊ฐ ๊ฒฝ๊ณ์ ์ ๊ฐ์ง ๊ฒ์ธ๊ฐ, ํ์ดํ ๋ฐ๋ฅผ ๊ฐ์ง ๊ฒ์ธ๊ฐ ๋๋ ์คํฌ๋กค ๋ฐ์ ์ ๋ฌด ๋ฑ๋ฑ์ ์ธ์ธํ๊ฒ ์ง์ ํด ์ค ์ ์๋ค. ๊ฐ๋ฅํ ์คํ์ผ๊ฐ์ ๊ดํ ์์ธํ ๋ด์ฉ์ ๋ ํผ๋ฐ์ค๋ฅผ ์ฐธ์กฐํ๋ WS_OVERLAPPEDWINDOW๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฅ ๋ฌด๋ํ ์๋์ฐ ์ค์ ์ํ๊ฐ ๋๋ค. ์ฆ ์์คํ ๋ฉ๋ด, ์ต๋ ์ต์ ๋ฒํผ, ํ์ดํ ๋ฐ, ๊ฒฝ๊ณ์ ์ ๊ฐ์ง ์๋์ฐ๋ฅผ ๋ง๋ค์ด ์ค๋ค.
X, Y, nWidth, nHeight
์ธ์์ ์ด๋ฆ์ด ์๋ฏธํ๋ฏ์ด ์๋์ฐ์ ํฌ๊ธฐ์ ์์น๋ฅผ ์ง์ ํ๋ฉฐ ํฝ์ ๋จ์๋ฅผ ์ฌ์ฉํ๋ค. x, y์ขํ๋ ๋ฉ์ธ ์๋์ฐ์ ๊ฒฝ์ฐ๋ ์ ์ฒด ํ๋ฉด์ ๊ธฐ์ค์ผ๋ก ํ๋ฉฐ ์ฐจ์ผ๋ ์๋์ฐ๋ ๋ถ๋ชจ ์๋์ฐ์ ์ข์๋จ์ ๊ธฐ์ค์ผ๋ก ํ๋ค. ์ ์๊ฐ์ ๋ฐ๋ก ์ง์ ํด๋ ๋๋ฉฐ CW_USEDEFAULT๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ฐ์ฆ๊ฐ ์์์ ์ ๋นํ ํฌ๊ธฐ์ ์์น๋ฅผ ์ค์ ํด ์ค๋ค. ์์ ์์๋ ๋ชจ๋ CW_USEDEFAULT๋ฅผ ์ฌ์ฉํ์๋ค.
hWndParent
๋ถ๋ชจ ์๋์ฐ๊ฐ ์์ ๊ฒฝ์ฐ ๋ถ๋ชจ ์๋์ฐ์ ํธ๋ค์ ์ง์ ํด ์ค๋ค. MDI ํ๋ก๊ทธ๋จ์ด๋ ํ์ ์๋์ฐ๋ ์๋์ฐ๋ผ๋ฆฌ ์์ง์ ์ธ ์ํ๊ด๊ณ๋ฅผ ๊ฐ์ ธ ๋ถ์(parent-child) ๊ด๊ณ๊ฐ ์ฑ๋ฆฝ๋๋๋ฐ ์ด ๊ด๊ณ๋ฅผ ์ง์ ํด ์ฃผ๋ ์ธ์์ด๋ค. ๋ถ๋ชจ ์๋์ฐ๊ฐ ์์ ๊ฒฝ์ฐ๋ ์ด ๊ฐ์ NULL๋ก ์ง์ ํ๋ฉด ๋๋ค.
hmenu
์๋์ฐ์์ ์ฌ์ฉํ ๋ฉ๋ด์ ํธ๋ค์ ์ง์ ํ๋ค. WndClass์๋ ๋ฉ๋ด๋ฅผ ์ง์ ํ๋ ๋ฉค๋ฒ๊ฐ ์๋๋ฐ ์๋์ฐ ํด๋์ค์ ๋ฉ๋ด๋ ๊ทธ ์๋์ฐ ํด๋์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ๋ชจ๋ ์๋์ฐ์์ ์ฌ์ฉ๋๋ ๋ฐ๋ฉด ์ด ์ธ์๋ก ์ง์ ๋ ๋ฉ๋ด๋ ํ์ฌ CreateWindow ํจ์๋ก ๋ง๋ค์ด์ง๋ ์๋์ฐ์์๋ง ์ฌ์ฉ๋๋ค. ๋ง์ฝ WndClass์์ ์ง์ ํ ๋ฉ๋ด๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ค๋ฉด ์ด ์ธ์๋ฅผ NULL๋ก ์ง์ ํ๋ฉด ๋๋ฉฐ WndClass์์ ์ง์ ํ ๋ฉ๋ด ๋์ ๋ค๋ฅธ ๋ฉ๋ด๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ด ์ธ์์ ์ํ๋ ๋ฉ๋ด ํธ๋ค์ ์ฃผ๋ฉด ๋๋ค. First ์์ ์ ๊ฒฝ์ฐ WndClass์๋ ๋ฉ๋ด๊ฐ ์ง์ ๋์ด ์์ง ์๊ณ CreateWindow ํจ์์์๋ ๋ฉ๋ด๋ฅผ ์ง์ ํ์ง ์์์ผ๋ฏ๋ก ๋ฉ๋ด์๋ ํ๋ก๊ทธ๋จ์ด ๋ง๋ค์ด์ง๋ค.
hinst
์๋์ฐ๋ฅผ ๋ง๋๋ ์ฃผ์ฒด, ์ฆ ํ๋ก๊ทธ๋จ์ ํธ๋ค์ ์ง์ ํ๋ค. WinMain์ ์ธ์๋ก ์ ๋ฌ๋ hInstance๋ฅผ ๋์ ํด ์ฃผ๋ฉด ๋๋ค.
lpvParam
CREATESTRUCT๋ผ๋ ๊ตฌ์กฐ์ฒด์ ๋ฒ์ง์ด๋ฉฐ ํน์ํ ๋ชฉ์ ์ ์ฌ์ฉ๋๋ค. ๋ณดํต์ NULL๊ฐ์ ์ฌ์ฉํ๋ค.
์ง๊ธ ๋น์ฅ ์ฌ๊ธฐ์ CreateWindow์ ๋ชจ๋ ์ธ์์ ๋ํด ๋ค ์ธ์ฐ๋ ค๊ณ ํ ํ์๊น์ง๋ ์๊ณ ์์ ์์ ์ด๋ค ๊ฐ์ด ์ฌ์ฉ๋์๋๊ฐ์ ๊ทธ ์๋ฏธ๊ฐ ๋ฌด์์ธ๊ฐ๋ง ๋์ถฉ ๋ณด๊ณ ๊ฐ๋๋ก ํ์. ์ฌ๊ธฐ์ ์ ๊น ํ์๊ฐ ์์๋ฆฌ๋ฅผ ์ข ํ์๋ฉด API ๊ณต๋ถ๋ฅผ ํ ๋๋ ๋ฌด์ํ ๊ฑด ๊ณผ๊ฐํ๊ฒ ๋ฌด์ํ๊ณ ์ง๋๊ฐ๋ ์๋ น์ด ํ์ํ๋ค. CreateWindow ํจ์๋ API๋ฅผ ์ฒ์ ๋ฐฐ์ฐ๋ ์ฌ๋์๊ฒ ๋ฌด์ฒ ์ค์ํ๊ธฐ๋ ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ ์ฒ์๋ถํฐ 11๊ฐ๋ ๋๋ ์ธ์๋ค์ ์ ํํ ์๋ฏธ๊น์ง ์์๋ค์ด ์ดํดํ ํ์๊น์ง๋ ์๋ค. x,y,lpszWindowName ๋ฑ ์ฝ๊ฒ ์ดํด๋๋ ์ธ์๋ค๋ง ๋์ถฉ ๋ด๋๋ฉด ๋์ง lpvParam๊ฐ์ ์ ๋ฌธ์ ์ด๊ณ ์ด๋ ค์ด ์ธ์์ ์๋ฏธ๋ dwStyle์ธ์์ ๋ชจ๋ ์คํ์ผ๊ฐ์ ๋ํด ๋ฐ๋์ ์์์ผ ํ๋ ๊ฒ์ ์๋๋ค. ๋ฌผ๋ก ์๋ฒฝํ๊ฒ ์ดํดํ๋ค๊ณ ๋์ ๊ฒ์ ์๊ฒ ์ง๋ง ๊ทธ๋ ๊ฒ ํ๋ค๊ฐ๋ ์ ํ์ ์ง์ณ ๊ธ์ ํฅ๋ฏธ๋ฅผ ์๊ณ ๋ง๋ค. ์ค์ํ ๊ฒ์ ์ด๋ก ์ ์ผ๋ก ์๋ฏธ๊ฐ ์๋ ํฐ ์ค๊ธฐ๋ฅผ ๋จผ์ ํ์ ํ๋๋ฐ ์ ์ฑ์ ์์ผ๋ผ๋ ๊ฒ์ด๋ค.
CreateWindow ํจ์๋ ์๋์ฐ์ ๊ดํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ง๋ ํ ์๋์ฐ ํธ๋ค์ ๋ฆฌํด๊ฐ์ผ๋ก ๋๊ฒจ์ค๋ค. ๋๊ฒจ์ง๋ ์๋์ฐ ํธ๋ค์ hWnd๋ผ๋ ์ง์ญ ๋ณ์์ ์ ์ฅ๋์๋ค๊ฐ ์๋์ฐ๋ฅผ ์ฐธ์กฐํ๋ ๋ชจ๋ ํจ์์ ์ธ์๋ก ์ฌ์ฉ๋๋ค.
CreateWindow ํจ์๋ก ๋ง๋ ์๋์ฐ๋ ์ด๋๊น์ง๋ ๋ฉ๋ชจ๋ฆฌ์์์๋ง ์์ ๋ฟ์ด๋ฉฐ ์์ง๊น์ง ํ๋ฉด์ ์ถ๋ ฅ๋์ง๋ ์์๋ค. ๋ฉ๋ชจ๋ฆฌ์ ๋ง๋ค์ด์ง ์๋์ฐ๋ฅผ ํ๋ฉด์ผ๋ก ๋ณด์ด๊ฒ ํ๋ ค๋ฉด ๋ค์ ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
BOOL ShowWindow(hWnd, nCmdShow);
hWnd ์ธ์๋ ํ๋ฉด์ผ๋ก ์ถ๋ ฅํ๊ณ ์ ํ๋ ์๋์ฐ์ ํธ๋ค์ด๋ฉฐ CreateWindow ํจ์๊ฐ ๋ฆฌํดํ ํธ๋ค์ ๊ทธ๋๋ก ๋๊ฒจ์ฃผ๋ฉด ๋๋ค. nCmdShow๋ ์๋์ฐ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ์ง์ ํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ๋งคํฌ๋ก ์์๋ค์ด ์ ์๋์ด ์๋ค.
๋งคํฌ๋ก ์์ | ์๋ฏธ |
SW_HIDE | ์๋์ฐ๋ฅผ ์จ๊ธด๋ค. |
SW_MINIMIZE | ์๋์ฐ๋ฅผ ์ต์ํ์ํค๊ณ ํ์ฑํ์ํค์ง ์๋๋ค. |
SW_RESTORE | ์๋์ฐ๋ฅผ ํ์ฑํ์ํจ๋ค. |
SW_SHOW | ์๋์ฐ๋ฅผ ํ์ฑํ์์ผ ๋ณด์ฌ์ค๋ค. |
SW_SHOWNORMAL | ์๋์ฐ๋ฅผ ํ์ฑํ์์ผ ๋ณด์ฌ์ค๋ค. |
nCmdShow ์ธ์์ ์ด๋ค ๊ฐ์ ๋๊ฒจ์ค ๊ฒ์ธ๊ฐ๋ ์ ํ ๊ณ ๋ฏผํ ํ์๊ฐ ์์ผ๋ฉฐ WinMain ํจ์์ ์ธ์๋ก ์ ๋ฌ๋ nCmdShow๋ฅผ ๊ทธ๋๋ก ๋๊ฒจ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ๊ทธ๋์ ShowWindow(hWnd,nCmdShow);์ ๊ฐ์ด ๊ฑฐ์ ํธ์ถ ํ์์ด ์ ํด์ ธ ์๋ ์ ์ด๋ค. ์ค๋ช ์ด ์ข ๊ธธ์ด์ง๊ธฐ๋ ํ์ง๋ง ์๋์ฐ๋ฅผ ๋ง๋ค๊ณ ํ๋ฉด์ ๋ํ๋ด๋ ์ฝ๋๋ ๋ค์ ๋ ์ค์ด๋ค.
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
์ฌ๊ธฐ๊น์ง ์คํํ๋ฉด ํ๋ฉด์ ์๋์ฐ๊ฐ ์ถ๋ ฅ๋๋ค. ์ด ํ๋ถํฐ๋ ๋ฉ์์ง ๋ฃจํ๊ฐ ์์๋๋ฉฐ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉ์์ ์๋์ฐ์ฆ, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๊ณผ ์ํธ ์ ๋ณด๋ฅผ ๊ตํํ๋ฉฐ ์คํ๋๋ค. ์ฌ๊ธฐ๊น์ง ์๋์ฐ๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด ๋ณด๋๋ก ํ์.
์ด ๊ณผ์ ์ ๊ฑฐ์ ์ ํํ๋ ๊ณผ์ ์ด๋ฏ๋ก ๊ณ์ ์๋์ฐ์ฆ ํ๋ก๊ทธ๋๋ฐ์ ๊ณต๋ถํ ์๊ฐ์ด ์๋ค๋ฉด ์๊ธฐํ ๋ง๋ ํ๋ค. ์ด ๊ณผ์ ์ด WinMain์์ ๋ฐ๋์ ํด ์ฃผ์ด์ผ ํ ๊ณผ์ ์ด๋ฉฐ ๊ทธ ์ด์ธ์ ์ฒ๋ฆฌ๋ ํด ์ฃผ์ด์ผ ํ ํ์๊ฐ ๊ฑฐ์ ์๋ค.
์๋์ฐ์ฆ๋ ์ธ๊ฐ์ง ๋์ ์ฐ๊ฒฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฃจ์ด์ ธ ์๋๋ฐ
๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ณ ์คํ์ํค๋ KERNEL, ์ ์ ์ธํฐํ์ด์ค์ ์๋์ฐ๋ฅผ ๊ด๋ฆฌํ๋ USER ๊ทธ๋ฆฌ๊ณ
ํ๋ฉด ์ฒ๋ฆฌ์ ๊ทธ๋ํฝ์ ๋ด๋นํ๋ GDI์ด๋ค.
์ถ๋ ฅ์ ํ๋ ค๋ฉด ์ฐ๋ฆฌ๋ GDI(Graphic Device Interface)๋ชจ๋์ ํน๋ณํ ๊ด์ฌ์ ๊ธฐ์ธ์ฌ์ผ ํ๋ค. ํ๋ฉด์ผ๋ก ์ถ๋ ฅ๋๋ ๋ชจ๋ ๊ธ์์ ๊ทธ๋ฆผ์ GDI๋ฅผ ํตํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
DC (Device Context)๋ ์ถ๋ ฅ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ฒด์ด๋ฉฐ GDI๋ชจ๋์ ์ํด ๊ด๋ฆฌ๋๋ค. ์ด๋ค ํฐํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ, ์ ์ ์์๊ณผ ๊ตต๊ธฐ, ์ฑ์ ๋ฌด๋ฌ์ ์์, ์ถ๋ ฅ๋ฐฉ๋ฒ ๋ฑ๋ฑ์ด ๋ชจ๋ ์ถ๋ ฅ์ ํ์ํ ์ ๋ณด๋ค์ด๋ค. ํ๋ฉด ์ถ๋ ฅ์ DC๊ฐ ํ์ํ ์ด์ ๋ฅผ ์ดํด๊ฐ ์ํด์ ๋ช๊ฐ์ง ์ํฉ์ ๋ค์ด๋ณด์
์ํฉ1
์ฐ์ ํ๋ฉด์ ์ ์ ๊ธ๋ LineTo๋ผ๋ ํจ์๋ฅผ ์๊ฐํด ๋ณด์. ์ ์ ๊ธ๊ธฐ ์ํด์๋ ์ต์ํ ์์์ ๊ณผ ๋์ ์ ์ขํ๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์์์ ์ผ๋ก ์ฝ๊ฒ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฉด LineTo(x1, y1, x2, y2)์ ๊ฐ์ ์์ผ๋ก ํจ์๋ฅผ ํธ์ถํ์ฌ ์ ์ ๊ทธ์ ์ ์์ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์กฐ๊ธ ๋ ์๊ฐ ํด๋ณด๋ฉด ๋ ์ ์ ์ขํ์ธ์๋ ์ฌ๋ฌ๊ฐ์ง ์ ๋ณด๊ฐ ๋ ํ์ํ๋ค. ์ ์ ์์, ๊ตต๊ธฐ, ๋ชจ์, ์ ์ ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ, ์ขํ๊ฐ์ ํด์ํ๋ ๋ฐฉ๋ฒ ๋ฑ์ ์ถ๊ฐ ์ ๋ณด๊ฐ ์์ด์ผ ๋น๋ก์ ์๋ฒฝํ ์ ์ ๊ทธ์ ์ ์๋ค. ์ด๋ฐ ์ ๋ณด๋ค์ ๋ชจ๋ ์ธ์๋ก ๋๊ฒจ์ค๋ค๋ฉด LineToํจ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ชจ์์ด ๋ ๊ฒ์ด๋ค.
LineTo(StartX, StartY, EndX, EndY, Color, Width, Shape, ROP, mode,......)
์ด๋ฐ ์ ๋ณด๋ค์ ์ผ์ผ์ด ์ธ์๋ก ์ ๋ฌํ ๊ฒ์ด ์๋๋ผ ํ ๊ณณ์ ๋ชจ์๋๊ณ ๊ทธ ๊ฐ๋ค์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ํจ์ฌ ๋ ํธ๋ฆฌํ๊ณ ํจ์จ์ ์ด๋ค. ๊ทธ๋์ ์ด๋ฐ ์ ๋ณด๋ค์ ๋ชจ๋ ๋ชจ์ DC๋ผ๋ ๊ฒ์ ๋ง๋ค๊ณ ๊ทธ๋ฆฌ๊ธฐ ํจ์์์๋ DC์ ํธ๋ค์๋ง์ ๋๊ฒจ๋ฐ์ ๊ทธ๋ฆฌ๊ธฐ์ ํ์ํ ์ถ๊ฐ ์ ๋ณด๋ ๋ชจ๋ DC์ ์ ์ ๋์ด ์๋ ๊ฐ์ ์ฌ์ฉํ๋ค.
์ด๋ฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด LineTo ํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํด์ง์ ์์ ๊ฒ์ด๋ค.
LineTo(hdc, x, y)
์ํฉ2
DC๊ฐ ํ์ํ ๋๋ค๋ฅธ ์๋ ์๋์ฐ์ฆ๋ ์ฌ๋ฌ๊ฐ์ ํ๋ก๊ทธ๋จ์ด ๋์์ ์คํ๋๋ ๋ฉํฐํ์คํน ์์คํ ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆฌ๊ธฐ ํจ์์ ์ํด ์ค์ ์ถ๋ ฅ๋๋ ๋ชจ์์ ์ฃผ๋ณํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. LineTo(hdc, 100, 100)์ ํธ์ถ ํ์๋ ํ๋ฉด์์ (100, 100)๊น์ง์ ์ ์ ์ฐ๋ ๊ฒ์ด ์๋๋ผ ์ค์ ๋ก ์ ์ด ์ฐํ์ผ ํ ๋ถ๋ถ์ ํ์ฌ ์๋์ฐ๊ฐ ์ฐจ์งํ๊ณ ์๋ ์์ญ์ด ๋์ด์ผํ๋ค.
๋ํ 2๊ฐ์ ์๋์ฐ๊ฐ ์์๋ ํ๋ฉด์ ๊ทธ๋ ค์ ธ์ผ ํ ๋ถ๋ถ์ ํด๋น ์ฝ๋๊ฐ ์คํ๋ ์๋์ฐ์์ญ์์๋ง ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ์ผ ํ๋ค.
์ด๋ฌํ ์ด์ ์ธ์๋ DC์ ์กด์ฌ ์ด์ ๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ง๋ง ์ฌ๊ธฐ์๋ DC๋ฅผ ์ ์ฌ์ฉํ๋๊ฐ ์ ๋๋ง ์ง๊ฐ์ ์ผ๋ก ์ดํดํ๊ณ ๋์ด๊ฐ๋๋ก ํ์.
'๐ Development Study > ๐ป Win32API' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
FrameWork (1) | 2022.09.07 |
---|---|
DC์ ์ ๋ณด์์ (0) | 2022.09.06 |
์ค๋ฒ๋ก๋ฉ๊ณผ ํ ํ๋ฆฟ (0) | 2022.08.18 |
ํจ์ (0) | 2022.08.18 |
๋ช ๋ น๋ฌธ ๋ฐ ํ๋ฆ ์ ์ด (0) | 2022.08.18 |
๋๊ธ