μ μ΄μ λμ λ¦μ§ λͺ»νκ³ μ¬μ°λ μμ§ λͺ»ν μ¬λμ΄ λκ³ λ³λ€μ΄ νν νλ€ λ¬΄μ ν리. - ζ³ ε₯ ηΆ
ο»Ώ
1 λ©μΈμ§ κΈ°λ° μ²λ¦¬ #
- win32 μ΄μ체κ³λ λͺ¨λ νλ‘μΈμ€(νλ‘κ·Έλ¨)μ νΉμ μν©μ "λ©μΈμ§"λ‘ μ μνκ³ μ΄μ λν λ°μμ μ²λ¦¬νλ λ°©μμΌλ‘ λͺ¨λ νλ‘κ·Έλ¨μ μ΄μνλ€.
- λ©μΈμ§μ μ : μλμ°μ νλ, μ΅μν, μ΄λ, ν€λ³΄λ λλ¦Ό, λ§μ°μ€ ν΄λ¦, μ΄λ, μμ€ν
μ’
λ£ λ±λ±
2 ν΅μμ μΈ win32 νλ‘κ·Έλ¨μ μ€νμμ #
WNDCLASS λλ
WNDCLASSEX μ μ - μλμ°μ κΈ°λ°μΈ μλμ°ν΄λμ€ μμ±
RegisterClass() λλ
RegisterClassEx()λ₯Ό μ€ν - μλμ° ν΄λμ€λ₯Ό μ΄μ체κ³μ λ±λ‘
CreateWindow() λλ
CreateWindowEx()λ₯Ό μ€ν - λ©λͺ¨λ¦¬μμ μλμ° μμ±
ShowWindow() μ€ν - μλμ°λ₯Ό νλ©΄μ νμ
- λ©μΈμ§ 루ν - μ΄μ체κ³λ‘λΆν° μ μ‘λ λ©μΈμ§λ₯Ό μ²λ¦¬
3 λΌλμμ€ #
μλ§λ μΈμμμ κ°μ₯ κ°λ¨ν win32 API μμ€μΌκ²λλ€. devcpp νλ‘μ νΈμμ νΌμμ΅λλ€.
#include <windows.h>
/* μλμ° νλ‘μμ Έ μ μΈ */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
/* μλμ° ν΄λμ€λͺ
μ μ ν©λλ€ */
char szClassName[ ] = "λΌλμ΄ν리μΌμ΄μ
";
int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nCmdShow)
{
HWND hwnd; /* μλμ° νΈλ€ */
MSG messages; /* μλμ° λ©μΈμ§λ₯Ό μμμ μΌλ‘ λ΄μλ λ³μ. λ©μΈμ§ 루νμμ μ¬μ©. */
WNDCLASSEX wincl; /* μλμ°ν΄λμ€ λ°μ΄ν ꡬ쑰체 */
/* μλμ° ν΄λμ€ λ°μ΄ν ꡬ쑰체μ κ°μ μ±μ΄λ€ */
wincl.hInstance = hThisInstance; /* νμ¬ μΈμ€ν΄μ€ νΈλ€κ° μ§μ */
wincl.lpszClassName = szClassName; /* ν΄λμ€ μ΄λ¦. λ³΄ν΅ μ΄ν리μΌμ΄μ
μ΄λ¦μ μ§μ . */
wincl.lpfnWndProc = WindowProcedure; /* μλμ° νλ‘μμ Έ ν¨μ ν¬μΈν° */
wincl.style = CS_DBLCLKS; /* λλΈν΄λ¦ μ΄λ²€νΈλ₯Ό λ°μλ€μ
λλ€ */
wincl.cbSize = sizeof (WNDCLASSEX); /* μ΄ κ΅¬μ‘°μ²΄ ν¬κΈ° μ€μ . (λ°λμ ν΄μΌν¨) */
/* λ§μ°μ€ 컀μ μ΄λ―Έμ§λ‘μ κΈ°λ³Έ μμ€ν
컀μλ₯Ό μ€μ ν©λλ€ */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* λ©λ΄μ€μ μν¨ */
wincl.cbClsExtra = 0; /* μλμ° ν΄λμ€μ 첨λΆλ λ°μ΄ν μμ. λλΆλΆμ κ²½μ° 0 */
wincl.cbWndExtra = 0; /* λΆκ°μ μΈ μλμ° μΈμ€ν΄μ€ λλ ꡬ쑰체 μμ. λλΆλΆμ κ²½μ° 0 */
/* μλμ° κΈ°λ³Έ λ°°κ²½μμμ μ§μ . κΈ°λ³Έ ν
λ§ μμμΌλ‘ μ μ©ν©λλ€. */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/* μλμ° ν΄λμ€λ₯Ό λ±λ‘νκ³ μ€ν¨ν κ²½μ°μλ νλ‘κ·Έλ¨μ μ’
λ£ν©λλ€ */
if (!RegisterClassEx (&wincl))
return 0;
/* ν΄λμ€κ° λ±λ‘λμμΌλ©΄ μ΄μ μλμ°λ₯Ό μμ±ν©λλ€! */
hwnd = CreateWindowEx (
0, /* μλμ° νμ₯ μ΅μ
*/
szClassName, /* ν΄λμ€μ΄λ¦ */
"ν
μ€νΈμ΄ν리μΌμ΄μ
", /* μλμ° νμ΄ν λ°μ μ ν λ¬Έμμ΄ */
WS_OVERLAPPEDWINDOW, /* κΈ°λ³Έ μλμ° νν */
CW_USEDEFAULT, /* μλμ° μμΉ x μ’ν */
CW_USEDEFAULT, /* μλμ° μμΉ y μ’ν */
544, /* μλμ° ν */
375, /* μλμ° λμ΄ */
HWND_DESKTOP, /* μλμ°λ λ°μ€ν¬νμ λν΄ μμμλμ°λ‘μ μμ± */
NULL, /* λ©λ΄μμ */
hThisInstance, /* νλ‘κ·Έλ¨ μΈμ€ν΄μ€ νΈλ€ */
NULL /* μλμ° μμ±μ μ¬μ©ν μΆκ° λ°μ΄ν μμ */
);
/* νλ©΄μ μλμ°κ° 보μ΄λλ‘ νλ€. nCmdShowλ WinMain()μμ 4λ²μ§Έ λ§€κ°λ³μμ. */
ShowWindow (hwnd, nCmdShow);
/* λ©μΈμ§λ£¨ν μ€ν. GetMessage()κ° 0μ λ°νν λκΉμ§ κ³μ 루νλ₯Ό λ°λ³΅ν©λλ€. */
while (GetMessage (&messages, NULL, 0, 0))
{
/* κ°μ ν€ λ©μΈμ§(WM_KEYDOWN)μ λ¬Έμ λ©μΈμ (WM_CHAR)λ‘ λ²μν©λλ€ */
TranslateMessage(&messages);
/* μλμ° νλ‘μμ Έλ‘ λ©μΈμ§λ₯Ό 보λ
λλ€ */
DispatchMessage(&messages);
}
/* νλ‘κ·Έλ¨ λ°νκ°μ 0μ
λλ€. μ΄λ PostQuitMessage() ν¨μμμ λ§€κ°λ³μλ‘ λκ²Όλ κ°μ΄ λμ΄μ€κ² λ©λλ€. (μλ μ°Έμ‘°) */
return messages.wParam;
}
/* μ΄ ν¨μλ μλμ°μ¦ ν¨μ DispatchMessage()λ₯Ό νΈμΆν λ μ€νλ©λλ€. */
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* λ©μΈμ§μ λ°λΌ λΆκΈ°ν©λλ€ */
{
case WM_DESTROY:
PostQuitMessage (0); /* λ©μΈμ§ νμ WM_QUIT λ©μΈμ§λ₯Ό 보λ
λλ€. */
break;
default: /* λ€λ£¨μ§ μμ λ©μΈμ§λ λͺ¨λ μ΄μ체κ³μκ² λκΉλλ€. */
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}









