Windows
Windows๋ผ๋ ์ ํ๋ช ๊ณผ ๊ฐ์ด Windows์ฉ ์์ฉ ํ๋ก๊ทธ๋จ์ ํ๋ก๊ทธ๋๋ฐํ ๋ ์ฃผ๋ ์ฃผ์ ํ๋๋ '์ฐฝ(Window)'์ ๋ง๋ค๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค. windows ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ตฌ์ฑ์์, [์ฃผ ์ฐฝ, ๋๊ตฌ ๋ชจ์, ๋ฉ๋ด, ์คํฌ๋กค๋ฐ, ๋ฒํผ, ๊ธฐํ ๋ํ์์ ์ปจํธ๋กค]์ ๋ชจ๋ ์ฐฝ์ด๋ค. ๋ฐ๋ผ์ windows ์์ฉ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ ์ฐฝ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
1. ์์
Windows์์๋ ์ฌ๋ฌ ๊ฐ์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋์์ ์คํ๋ ์ ์๋ค. ๋ฐ๋ผ์ CPU๋ ๋ฉ๋ชจ๋ฆฌ, ๋ชจ๋ํฐ ํ๋ฉด ๊ฐ์ ํ๋์จ์ด ์์๋ค์ ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๊ณต์ ํด์ผ ํ๋ค.
๊ทธ๋ ๊ฒ ๋๋ฉด ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์(Resource)์ ๋ฌด์ง์ํ๊ฒ ์ ๊ทผํ๊ฒ ๋๋ค. ์ด๋ฅผ ๋ง๊ธฐ ์ํด windows๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ํ๋์จ์ด์ ์ง์ ์ ๊ทผ์ ๋ชปํ๊ฒ ๋ง๋๋ค.
windows๋ ํ์ฌ ์ธ์คํด์คํ๋์ด ์๋ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ๊ด๋ฆฌํ๊ณ ์์์ ๊ทธ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ์ ์ ํ ๋ถ๋ฐฐํ๋ ๊ฒ์ด๋ค. ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ด์ ์์ ์ด๋, ์์ฉ ํ๋ก๊ทธ๋จ์ด ์คํ ์ค์ธ ๋ค๋ฅธ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ์ํฅ์ ๋ฏธ์น ์ ์๋ ์ด๋ค ์์ ์ ์ํํ๋ ค๋ฉด ๋ฐ๋์ windows๋ฅผ ๊ฑฐ์ณ์ผํ๋ค.
์์ฉ ํ๋ก๊ทธ๋จ์ด ์ง์ ๋น๋์ค ๋ฉ๋ชจ๋ฆฌ์ ๋ญ๊ฐ ๊ธฐ๋กํ ์ ์๋ค.
2. ์ฌ๊ฑด, ๋ฉ์์ง ๋๊ธฐ์ด, ๋ฉ์์ง, ๋ฉ์์ง ๋ฃจํ
Windows ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ๊ฑด ์ฃผ๋์ ํ๋ก๊ทธ๋๋ฐ ๋ชจํ(event - driven programming model)์ ๋ฐ๋ฅธ๋ค. ์ฌ๊ฑด[ํค ํด๋ฆญ, ๋ง์ฐ์ค ํด๋ฆญ, ๋ง์ฐ์ค ํ ์์ง์ ๋ฑ๋ฑ .. ]์ด ๋ฐ์ํ๋ฉด ๊ทธ์ ๋ฐ์ํด์ ์์ ์ ์งํํ๋ค.
์ฌ๊ฑด์ด ๋ฐ์ํ๋ฉด window๋ ๋ฉ์์ง(message)๋ฅผ ๋ณด๋ธ๋ค. ๊ทธ ๋ฉ์์ง๋ ๋ฉ์์ง ๋๊ธฐ์ด(message queue/ ์ฐ์ ์์ ๋๊ธฐ์ด(priority queue))์ ์ถ๊ฐ๋๋ค. ์ด๋ฌํ ๋ฉ์์ง๋ ๋ฉ์์ง ๋ฃจํ(message loop)๋ฅผ ๋๋ฆฌ๋ฉด์ ์๋ก์ด ๋ฉ์์ง๊ฐ ์๋์ง ๊ฒ์ฌํ๋ค.
์๋ก์ด ๋ฉ์์ง๊ฐ ์์ผ๋ฉด ๊ทธ ๋ฉ์์ง์ ์ฐ๊ด๋๋ ์ฐฝ๊ณผ ์ฐ๊ด๋ ์ฐฝ ํ๋ก์์ (window procedure)์ ๋ฉ์์ง๋ฅผ ๋๊ฒจ์ค๋ค.
์ฐฝ ํ๋ก์์ ๋ ํน์ ๋ฉ์์ง์ ๋ฐ์ํด์ ์คํ๋๋ ์ฝ๋๋ฅผ ๋ด๋ ํจ์๋ก ๊ฐ๋ฐ์๊ฐ ๊ตฌํํด์ผ ํ๋ค. ์ฐฝ์ด ์ง์ ์ฒ๋ฆฌํ์ง ์๋ ๋ฉ์์ง๋ค์ ๊ธฐ๋ณธ ์ฐฝ ํ๋ก์์ (default window procedure)๋ก ๋๊ฒจ์ฃผ์ด์ ๊ฑฐ๊ธฐ์์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค.
win32 api๋ dewindowproc์ด๋ผ๋ ์ด๋ฆ์ ๊ธฐ๋ณธ ์ฐฝ ํ๋ก์์ ๋ฅผ ์ ๊ณตํ๋ค.
3. ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค (GUI/ Graphical User Interface)
Direct3D์์ฉ ํ๋ก๊ทธ๋จ์ 3์ฐจ์ ์ฅ๋ฉด์ ์ฃผ ์ฐฝ์ ํด๋ผ์ด์ธํธ ์์ญ(client area)์ ๋ ๋๋งํ๋ค.
4. ์ ๋์ฝ๋(Unicode)
ํ๋์ ๋ฌธ์๋ฅผ 4๋ฐ์ดํธ(16๋นํธ) ๊ฐ์ผ๋ก ํํํ๋ค.
* ASCII ๋ฌธ์์ด: char ๋ฐฐ์ด๋ก ํํ๋๋ฉฐ, ๊ฐ ๋ฌธ์๋ 1๋ฐ์ดํธ(8๋นํธ) ํฌ๊ธฐ
์ด ๋๋ถ์ ์ฌ๋ฌ ๋๋ผ์ ๋ฌธ์์ ๊ธฐํธ๋ฅผ ํฌํจํ ์ปค๋ค๋ ๋ฌธ์ ์งํฉ์ ํํํ ์ ์๋ค. C++์์ ์ ๋์ฝ๋๋ฅผ ์ฌ์ฉํ ๋๋ ๋นํธ์๊ฐ ๋ง์ wchar_t๋ฅผ ์ฌ์ฉํ๋ค. 32๋นํธ์ 64๋นํธ windows์์ wchar_t๋ 16๋นํธ์ด๋ค. ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋ฌธ์์ด ๋ฆฌํฐ๋ด ์์ ๋๋ฌธ์ L์ ๋ถ์ฌ์ผ ํ๋ค. ์ ๋์ฌ L์ ์ปดํ์ผ๋ฌ์๊ฒ ์ด ๋ฌธ์์ด ๋ฆฌํฐ๋์ char๊ฐ ์๋๋ผ wchar_t๋ค์ ๋ฌธ์์ด๋ก ์ทจ๊ธํ๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
์ด๋ฟ๋ง ์๋๋ผ ๋์ ๋ฌธ์์ด์ ์ฌ์ฉํ ๋๋ ๋ฌธ์์ด ํจ์๋ ๋์ ๋ฌธ์์ด ๋ฒ์ ์ ์ฌ์ฉํด์ผํ๋ค.
ASCII | UNICODE | ์ค๋ช |
strlen | wcslen | ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ค. |
strcpy | wcspy | ๋ฌธ์์ด์ ๋ณต์ฌํ๋ค. |
strcmp | wcscmp | ๋ ๋ฌธ์์ด์ ์ง์ ๋ ๊ธธ์ด๋งํผ ๋น๊ตํ๋ค. |
char* | wchar_t* | |
strcat | wcscat | ๋ฌธ์์ด์ ์ด์ด ๋ถ์ธ๋ค. |
strncpy | wcsncpy | ์ง์ ๋ ๊ธธ์ด๋งํผ ๋ฌธ์์ด์ ๋ณต์ฌํ๋ค. |
strchr | wcschr | ๋ฌธ์์ด์์ ํน์ ๋ฌธ์๋ฅผ ์ฐพ๋๋ค. |
strstr | wcsstr | ๋ฌธ์์ด์์ ํน์ ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐพ๋๋ค |
strcasecmp | wcscasecmp | ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๊ณ ๋ ๋ฌธ์์ด์ ๋น๊ตํ๋ค. |
strtok | wcstok | ๋ฌธ์์ด์ ๊ตฌ๋ถ์๋ก ๋ถ๋ฆฌํ๋ค. |
std::string | std::wstring |
5. ์ ๋์ฝ๋ ์ค์ ํ๊ธฐ - MSVC (Microsoft Visual Studio)
์๋จ ๋ฉ๋ด ํ๋ก์ ํธ -> ์์ฑ -> ๊ณ ๊ธ -> ๋ฌธ์์งํฉ -> ์ ๋์ฝ๋ ๋ฌธ์ ์งํฉ ์ฌ์ฉ
์ค์ ์ ํจ | 15 ์ดํ charํ์ ๋ง ์ฌ์ฉํ๋๋ก ์ค์ , ASCII๋ฌธ์์ด ์ฒ๋ฆฌ๋ง ์ง์ํ๋ฉฐ, ์ ๋์ฝ๋ ๋ฉํฐ์ฝ๋๋ ์ฌ์ฉํ์ง ์๋๋ค. |
์ ๋์ฝ๋ ๋ฌธ์ ์งํฉ ์ฌ์ฉ | TCHAR -> wchar_t ๋ฌธ์์ด ํจ์๋ wcslen, wcscpy ๋ฑ ์ ๋์ฝ๋ ํจ์๋ก ๋งคํ. |
๋ฉํฐ๋ฐ์ดํธ ๋ฌธ์ ์งํฉ ์ฌ์ฉ | TCHAR -> char ๋ฌธ์์ด ํจ์๋ strlen, strcpy ๋ฑ ANSI ํจ์๋ก ๋งคํ |
6. ๊ธฐ๋ณธ์ ์ธ Windows ์์ฉ ํ๋ก๊ทธ๋จ
1) HWND / ํธ๋ค
- handle to a window (window handle)
- windows๋ ํ๋ก๊ทธ๋๋ฐ์์ windows๊ฐ ๋ด๋ถ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๋ค์ ์ง์นญํ ๋์๋ ํธ๋ค์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- windows๊ฐ ์ ํด ์ค ํธ๋ค ๊ฐ์ ๋ณด๊ดํ๋ ์ฉ๋๋ก ์ฐ์ธ๋ค.
- Win32 API์๋ ์์ ์ ๋์์ด ๋๋ ์ฐฝ์ ์๋ณํ๊ธฐ ์ํด ์ฐฝ ํธ๋ค์ ์๊ตฌํ๋ ํจ์๋ค์ด ๋ง๋ค.
2) WDNCLASS
3) CreateWindow
- WNDCLASS ์ธ์คํด์ค ์์ฒด๊ฐ ์๋๋ผ ๊ทธ ์ธ์คํด์ค์ lpszClassName ํ๋์ ์ค์ ํ ํด๋์ค ์ด๋ฆ์ ์ด์ฉํด์ ์ง์ ํ๋ค.
- ์์ ์ด ์๋ก ์์ฑํ ์ฐฝ์ ํธ๋ค(HWND)์ ๋๋ ค์ค๋ค. (์์ฑํ์ง ๋ชปํ๋ค๋ฉด 0, null )
LPCSTR lpClassName | ํด๋์ค ์ด๋ฆ | RegisterClass, RegisterClassEx ํจ์๋ก ๋ฑ๋ก๋ ํด๋์ค ์ด๋ฆ์ด์ด์ผ ํ๋ค. |
LPCSTR lpWindowName | ์ ๋ชฉ | ์บก์ ๋ฐ์ ํ์ ๋ ํ ์คํธ |
DWORD dwStyle | ์คํ์ผ | |
int X | ์๋์ฐ์ ์ด๊ธฐ X ์ขํ | |
int Y | ์๋์ฐ์ ์ด๊ธฐ Y ์ขํ | |
int nWidth | ์๋์ฐ์ ์ด๊ธฐ ๋๋น | |
int nHeight | ์๋์ฐ์ ์ด๊ธฐ ๋์ด | |
HWND hWndParent | ๋ถ๋ชจ ์๋์ฐ ํธ๋ค | ์ต์์ ์๋์ฐ์ ๊ฒฝ์ฐ null๋ก ์ค์ |
HMENU hMenu | ๋ฉ๋ด ํธ๋ค | ํ์ ์์ผ๋ฉด null |
HINSTANCE hInstance | ์ ํ๋ฆฌ์ผ์ด์ ์ธ์คํด์ค ํธ๋ค | |
LPVOID lpParam | ์ถ๊ฐ ๋งค๊ฐ๋ณ์ |
* ์ฃผ์ ์คํ์ผ *
WS_MINIMIZEBOX | ์ต์ํ ๋ฒํผ ์ถ๊ฐ |
WS_MAXIMIZEBOX | ์ต๋ํ ๋ฒํผ ์ถ๊ฐ |
WS_SYSMENU | ์์คํ x ๋ฒํผ ์ถ๊ฐ |
WS_OVERLAPPED | ๊ธฐ๋ณธ ์ฐฝ ์คํ์ผ (ํ์ดํ ๋ฐ ํฌํจ) |
WS_THICKFRAME | ์ฐฝ ํฌ๊ธฐ ์กฐ์ |
WS_OVERLAPPEDWINDOW | ์ต์ํ, ํ์ฅ, ๋ซ๊ธฐ ๋ฒํผ์ ํฌํจํ ๊ธฐ๋ณธ ์ฐฝ ์คํ์ผ |
WS_VISIBLE | ์ฐฝ์ ์์ฑ ์ฆ์ ํ์ |
WS_POPUP | ๊ธฐ๋ณธ ์๋์ฐ ์คํ์ผ์ ๋ฌด์ํ๊ณ ํ์ ์ฐฝ์ฒ๋ผ ๋์ |
WS_CAPTION | ์ ๋ชฉ ํ์์ค(ํ์ดํ ๋ฐ) ํ์ฑํ |
WS_BORDER | ํ ๋๋ฆฌ ํ์ฑํ |
WS_CLIPSIBLINGS | ๋ถ๋ชจ ์ฐฝ์ด ํ์ (๋ค๋ฅธ ์์ ์ฐฝ) ์์ญ์ ๊ทธ๋ฆฌ์ง ์๋๋ก ์ค์ |
* ์คํ์ผ ์ฌ์ฉ ์์ *
ex) ์ต์ํ, ํ์ฅ, ๋ซ๊ธฐ ๋ฒํผ์ ํฌํจํ๊ณ ํ์ฅ ๋ฒํผ์ ๋นํ์ฑํ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ
DWORD dwStyle = WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_BORDER | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX;
4) ๋ฉ์์ง ๋ฃจํ
Windows ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ๋๋ฉด ์ด์์ฒด์ ๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ๋๋ค. ์ด ๋ฉ์์ง๋ฅผ GetMessage, PeekMessage ๋ฑ ํจ์๋ก ๊ฐ์ ธ์ค๊ณ , TranslateMessage์ DispatchMessage๋ฅผ ์ด์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ค.
- TranslateMessage: ํค ์ ๋ ฅ ๋ฉ์์ง ๋ณํ
- DispatchMessage: ๋ฉ์์ง๋ฅผ ์๋์ฐ ํ๋ก์์ ๋ก ์ ๋ฌ(wndProc)
* PeekMessage *
๊ฒ์์ ๋ฉ์์ง๊ฐ ์ฌ ๋๊น์ง ์๋ฌด ์ผ๋ ํ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ, ์ค์ค๋ก ๋์์์ด ๊ฐฑ์ ํ๋ค.
๋ฌธ์ ๋, ๋ฉ์์ง ๋ฃจํ์์ ํธ์ถํ๋ GetMessage ํจ์๋ ๋ฉ์์ง ๋๊ธฐ์ด์ ๋ฉ์์ง๊ฐ ์์ผ๋ฉด ์ค๋ ๋๋ฅผ ์๋ฉด(sleeping) ์ํ๋ก ์ ํํ๋ฉฐ, ๋ฉ์์ง๊ฐ ๋์ฐฉํด์ผ ์ค๋ ๋๊ฐ ๋ค์ ๊นจ์ด๋๋ค๋ ์ ์ด๋ค. ์ด๋ ๊ฒ์์ ์ ํฉํ ๋ฐฉ์์ด ์๋๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ์ GetMessage ๋์ PeekMessage ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. PeekMessageํจ์๋ ๋ฉ์์ง๊ฐ ์์ผ๋ฉด ์ฆ์ ์ ์ด๊ถ์ ๋ฐํํ๋ค. ์ด๋ ๋ ผ๋ธ๋กํน ๋ฃจํ๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๋จ์ ์ ๋ฉ์์ง๊ฐ ์์ ๋๋ ๊ณ์ ์คํ๋จ์ผ๋ก CPU ์ฌ์ฉ๋ฅ ์ด ๋๋ค.
5) ์ฐฝ ํ๋ก์์
- ์ฐฝ์ด ๋ฐ์ ํน์ ๋ฉ์์ง์ ๋ฐ์ํด์ ์คํํ๋ ์ฝ๋๋ฅผ ๋ด์ ํจ์๋ก, ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ฑํด์ผ ํ๋ค.
- ๋ชจ๋ ์ฐฝ ํ๋ก์์ ๋ ๋์ผํ ํจ์ ์๋ช ์ ๋ฐ๋ผ์ผ ํ๋ค.
- ์์ฉ ํ๋ก๊ทธ๋จ ์์ฒด๋ ์ด ํจ์๋ฅผ ํธ์ถํ์ง ์๋๋ค. ์ด ํจ์๋ ์ฐฝ์ด ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ ๋๊ฐ ๋๋ฉด windows๊ฐ ํธ์ถํด ์ค๋ค.

'๐จ๐ปโ๐ป programming > โฝ ์ปดํจํฐ ๊ณตํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธํ ] pch : pre compile header ์ธํ , ๋ค๋ฅธ ํ๋ก์ ํธ ์ฐธ์กฐํ๊ธฐ, ์คํํ์ผ ์ ์ฅ์์น ๋ณ๊ฒฝํ๊ธฐ (0) | 2025.03.06 |
---|---|
[assembly ๋ช ๋ น์ด] mov, lea (0) | 2024.06.26 |
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!