'''윈도 API, Windows API''' '''윈도 프로그래밍, Windows Programming''' 보통 [[C언어]]나, [[CPlusPlus언어]]로 개발한다. [[델파이,Delphi]] 등도 가능. Related: [[MFC]] Sub: [[Win16API]] [[Win32API]] [[Win64API]] [[GDI_Object]] [[DC,device_context]] { [[HDC]] } ---- [[TableOfContents]] 표는 알파벳 순으로 정렬. = 통상적으로 많이 정의되는 함수 = WinMain { 각 윈도에 대해 RegisterWindowEx()로 윈도 클래스를 등록한 다음 CreateWindow()로 윈도우를 생성한다. RegisterClassEx는 또 뭐지? WndProc을 등록함? } WndProc { } = 함수의 타입?? = WINAPI WinMain()을 꾸며주는 데 뜻은? CALLBACK WndProc()이 LRESULT CALLBACK WndProc(...)으로 정의된다. = 타입 = 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? 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 == 크기에 따라서 또는 관련된 것을 묶어서 정리 == 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 = 상수 = == CW_ == CW_USEDEFAULT == IDI_ == Identification Icon? == WM_ == Window Message? LRESULT CALLBACK WndProc(hwnd, iMsg, wParam, lParam) 함수 안의 switch(iMsg)문에서 처리하는 경우가 많은듯 WM_CREATE WM_DESTROY WM_PAINT == WS_ == Window Style. WS_OVERLAPPEDWINDOW 시스템 메뉴와 확대, 축소, 종료 버튼이 있는 형태 == 기타 == NULL = 함수 = 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) = Hungarian Notation = aka naming/convention/rule ||b ||BOOL? || ||cb ||count of bytes? || ||dw ||DWORD? || ||h ||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_ ||함수의 인자로 들어온 변수 || = graphics = 브러시,brush 펜,pen WM_PAINT [[메시지,message]] = message = [[메시지,message]] 받은 순서만 생각하지 않음. 중요도에 따른 우선순위가 있으며 WM_PAINT 같이 우선순위가 낮은 것은 message_queue 에 넣지 않고 message_table 로 관리한다. 메시지가 왔다는 것만 table에 flag로 표기한다. 그래서 중복해서 동일한 메시지가 수없이 반복되어 와도 중간에 온 것은 무시되며 나중에 한 번만 처리를 하게 된다. flag가 1인지만 보고 처리하며, 처리가 끝나고 나면 flag를 0으로 한다. WM_PAINT 같은 우선순위가 낮은 메시지는, ... WM_ 이건 pagename? [[WM,Windows_message]] ?? { WM_PAINT MFC 의 OnPaint 와 ... } == message queue == [[메시지큐,message_queue]] = DC,device_context = 장치맥락 ? GetDC ReleaseDC HDC - SDK CDC - MFC