WinAPI

윈도 API, Windows API
윈도 프로그래밍, Windows Programming

보통 C언어나, CPlusPlus언어로 개발한다. 델파이,Delphi 등도 가능.
Related: MFC




표는 알파벳 순으로 정렬.

1. 통상적으로 많이 정의되는 함수

WinMain
{
각 윈도에 대해 RegisterWindowEx()로 윈도 클래스를 등록한 다음
CreateWindow()로 윈도우를 생성한다.

RegisterClassEx는 또 뭐지?
WndProc을 등록함?
}

WndProc
{

}

2. 함수의 타입??

WINAPI
WinMain()을 꾸며주는 데 뜻은?

CALLBACK
WndProc()이 LRESULT CALLBACK WndProc(...)으로 정의된다.

3. 타입

ATOM
BOOL
BYTE
COLORREF
{
색을 지정하는 타입.

정의는 이렇게 32비트 정수이다.
typedef DWORD COLORREF;

RGB는,
#define RGB(r, g, b) ((COLORREF)(((BYTE)(r) | ((WORD)((BYTE)(g)) << 8 | (((DWORD)(BYTE(b)) << 16)))
}
CONST
DWORD
HANDLE
자원에 대한 포인터,pointer의 일종.chk
32bit int?
핸들,handle =핸들,handle =,handle . { handle
WpEn: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와 차이는
LPVOID
LRESULT
MSG
LPMSG와 차이는
PAINTSTRUCT
PPAINTSTRUCT
PAINTSTRUCT의 포인터형
PSTR
PWNDCLASSEX
WNDCLASSEX의 포인터형
RECT
TCHAR
UINT
WNDCLASSEX
WNDPROC
프로시저 함수의 타입인 듯
WPARAM

3.1. 크기에 따라서 또는 관련된 것을 묶어서 정리

BYTE
WORD
DWORD
DWORDLONG 64bit unsigned int?

LONG 32bit signed int
LONGLONG 64bit signed int?

FLOAT 32bit float

WPARAM 16bit message parameter
LPARAM 32bit message parameter

LPSTR =char*
LPCSTR
LPCTSTR
LPTSTR

4. 상수

4.1. CW_

CW_USEDEFAULT

4.2. IDI_

Identification Icon?

4.3. WM_

Window Message?

LRESULT CALLBACK WndProc(hwnd, iMsg, wParam, lParam) 함수 안의 switch(iMsg)문에서 처리하는 경우가 많은듯

WM_CREATE
WM_DESTROY
WM_PAINT

4.4. WS_

Window Style.

WS_OVERLAPPEDWINDOW
시스템 메뉴와 확대, 축소, 종료 버튼이 있는 형태

4.5. 기타

NULL

5. 함수

BeginPaint
끝나면 EndPaint
CreateWindows(..많음..)
DefWindowProc(hwnd, iMsg, wParam, lParam)
WndProc에서 switch(iMsg)로 처리하고 나서 처리하지 않은 나머지 메시지를 처리하라는 뜻으로 이것을 호출? chk
DispatchMessage
LONG DispatchMessage(CONST MSG *lpmsg);
커널에서 가져온 메시지를 wndclass에서 지정한 함수로 보내는(배달하는) 역할.
EndPaint
시작할 땐 BeginPaint
GetMessage(&msg, 0, 0, 0)
BOOL GetMessage (
LPMSG lpmsg,
HWND hWnd,
UINT uMsgFilterMin,
UINT uMsgFilterMax
);
GetStockObject(tbw)
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_ 함수의 인자로 들어온 변수

7. graphics

브러시,brush
펜,pen
WM_PAINT 메시지,message

8. message


받은 순서만 생각하지 않음.
중요도에 따른 우선순위가 있으며
WM_PAINT 같이 우선순위가 낮은 것은 message_queue 에 넣지 않고 message_table 로 관리한다. 메시지가 왔다는 것만 table에 flag로 표기한다. 그래서 중복해서 동일한 메시지가 수없이 반복되어 와도 중간에 온 것은 무시되며 나중에 한 번만 처리를 하게 된다. flag가 1인지만 보고 처리하며, 처리가 끝나고 나면 flag를 0으로 한다.

WM_PAINT 같은 우선순위가 낮은 메시지는,

...

WM_ 이건 pagename? WM,Windows_message ??
{
WM_PAINT
MFC 의 OnPaint 와 ...


List Of Windows Messages - WineHQ Wiki
https://wiki.winehq.org/List_Of_Windows_Messages


}