Difference between r1.15 and the current
@@ -14,6 +14,9 @@
{
[[HDC]]
}
----
[[TableOfContents]]
[[HDC]]
}
https://learn.microsoft.com/en-us/windows/win32/api/
[[TableOfContents]]
윈도 API, Windows API
윈도 프로그래밍, Windows Programming
윈도 프로그래밍, Windows Programming
표는 알파벳 순으로 정렬.
1. 통상적으로 많이 정의되는 함수 ¶
WinMain
{
각 윈도에 대해 RegisterWindowEx()로 윈도 클래스를 등록한 다음
CreateWindow()로 윈도우를 생성한다.
{
각 윈도에 대해 RegisterWindowEx()로 윈도 클래스를 등록한 다음
CreateWindow()로 윈도우를 생성한다.
RegisterClassEx는 또 뭐지?
WndProc을 등록함?
}WndProc
{
{
}
2. 함수의 타입?? ¶
WINAPI
WinMain()을 꾸며주는 데 뜻은?
CALLBACKWndProc()이 LRESULT CALLBACK WndProc(...)으로 정의된다.
3. 타입 ¶
정의는 이렇게 32비트 정수이다.
typedef DWORD COLORREF;
RGB는,
CONST
DWORD
HANDLE
Handle_(computing)
= https://en.wikipedia.org/wiki/Handle_(computing)
= https://en.wikipedia.org/wiki/Handle_(computing)
}
HBRUSH
HCURSOR
HDC
HICON
HINSTANCE
HMENU
HPALETTE
HPEN
HWND
LPARAM
LPCTSTR
LPMSG
LRESULT
MSG
PPAINTSTRUCT
PWNDCLASSEX
TCHAR
UINT
WNDCLASSEX
WNDPROC
#define RGB(r, g, b) ((COLORREF)(((BYTE)(r) | ((WORD)((BYTE)(g)) << 8 | (((DWORD)(BYTE(b)) << 16)))}
CONST
DWORD
HANDLE
Handle_(computing)
= https://en.wikipedia.org/wiki/Handle_(computing)
= https://en.wikipedia.org/wiki/Handle_(computing)
}
HBRUSH
HCURSOR
HDC
HICON
HINSTANCE
HMENU
HPALETTE
HPEN
HWND
LPARAM
LPCTSTR
LPMSG
MSG와 차이는
LPVOIDLRESULT
MSG
LPMSG와 차이는
PAINTSTRUCTPPAINTSTRUCT
PAINTSTRUCT의 포인터형
PSTRPWNDCLASSEX
WNDCLASSEX의 포인터형
RECTTCHAR
UINT
WNDCLASSEX
WNDPROC
프로시저 함수의 타입인 듯
WPARAM3.1. 크기에 따라서 또는 관련된 것을 묶어서 정리 ¶
BYTE
WORD
DWORD
DWORDLONG 64bit unsigned int?
WORD
DWORD
DWORDLONG 64bit unsigned int?
LONG 32bit signed int
LONGLONG 64bit signed int?
LONGLONG 64bit signed int?
FLOAT 32bit float
WPARAM 16bit message parameter
LPARAM 32bit message parameter
LPARAM 32bit message parameter
LPSTR =char*
LPCSTR
LPCTSTR
LPTSTR
LPCSTR
LPCTSTR
LPTSTR
4.3. WM_ ¶
Window Message?
LRESULT CALLBACK WndProc(hwnd, iMsg, wParam, lParam) 함수 안의 switch(iMsg)문에서 처리하는 경우가 많은듯
WM_CREATE
WM_DESTROY
WM_PAINT
WM_DESTROY
WM_PAINT
5. 함수 ¶
BeginPaint
DefWindowProc(hwnd, iMsg, wParam, lParam)
PostQuitMessage
ShowWindow(hWnd, iCmdShow)
TextOut(hdc, x, y, "string", string length)인지 chk
TranslateMessage
끝나면 EndPaint
CreateWindows(..많음..)DefWindowProc(hwnd, iMsg, wParam, lParam)
WndProc에서 switch(iMsg)로 처리하고 나서 처리하지 않은 나머지 메시지를 처리하라는 뜻으로 이것을 호출? chk
DispatchMessageLONG DispatchMessage(CONST MSG *lpmsg);
커널에서 가져온 메시지를 wndclass에서 지정한 함수로 보내는(배달하는) 역할.
EndPaint커널에서 가져온 메시지를 wndclass에서 지정한 함수로 보내는(배달하는) 역할.
시작할 땐 BeginPaint
GetMessage(&msg, 0, 0, 0)BOOL GetMessage (
GetStockObject(tbw)LPMSG lpmsg,
HWND hWnd,
UINT uMsgFilterMin,
UINT uMsgFilterMax
);HWND hWnd,
UINT uMsgFilterMin,
UINT uMsgFilterMax
PostQuitMessage
ShowWindow(hWnd, iCmdShow)
TextOut(hdc, x, y, "string", string length)인지 chk
TranslateMessage
BOOL TranslateMessage(CONST MSG *lpmsg);
UpdateWindow(hWnd)6. Hungarian Notation ¶
aka naming/convention/rule
b | BOOL? |
cb | count of bytes? |
dw | DWORD? |
h | handle // 핸들,handle |
hbr | handle to background color?? |
hdc | DC에 대한 핸들 |
hwnd | Window에 대한 핸들 |
i | int |
l | LONG? |
lp | |
lpfn | WndProc같은 함수에 대한 long pointer? |
lpsz | null-terminated string(asciiz)에 대한 long pointer? |
msg | MSG 형식의 구조체 |
p | 포인터,pointer |
ps | PAINTSTRUCT 형식의 구조체 |
sz | |
u | unsigned int? UINT? |
w | WORD? |
g_ | 전역 변수 |
m_ | 멤버 변수 |
i_ | 함수의 인자로 들어온 변수 |
8. message ¶
받은 순서만 생각하지 않음.
중요도에 따른 우선순위가 있으며
WM_PAINT 같이 우선순위가 낮은 것은 message_queue 에 넣지 않고 message_table 로 관리한다. 메시지가 왔다는 것만 table에 flag로 표기한다. 그래서 중복해서 동일한 메시지가 수없이 반복되어 와도 중간에 온 것은 무시되며 나중에 한 번만 처리를 하게 된다. flag가 1인지만 보고 처리하며, 처리가 끝나고 나면 flag를 0으로 한다.
중요도에 따른 우선순위가 있으며
WM_PAINT 같이 우선순위가 낮은 것은 message_queue 에 넣지 않고 message_table 로 관리한다. 메시지가 왔다는 것만 table에 flag로 표기한다. 그래서 중복해서 동일한 메시지가 수없이 반복되어 와도 중간에 온 것은 무시되며 나중에 한 번만 처리를 하게 된다. flag가 1인지만 보고 처리하며, 처리가 끝나고 나면 flag를 0으로 한다.
WM_PAINT 같은 우선순위가 낮은 메시지는,
...
}