본문 바로가기

API Programming15

[API] GDI Object(Graphic Device interface) 란? GDI(Graphic Device interface) GDI는 화면, 프린터 등 모든 출력 장치를 제어하는 윈도우의 핵심 모듈 중 하나이다. 윈도우 프로그램에서의 모든 출력은 GDI를 통해서 화면과 프린터로 나가게 되어 있다. GDI Object란 그래픽 출력에 사용되는 도구들을 말하며 펜,브러쉬,비트맵,폰트 등 이 것을 모두 GDI 오브젝트라고 한다. GDI 오브젝트는 구조체이지만 핸들로 관리되므로 GDI 오브젝트를 생성하는 함수를 부르고 이 함수가 리턴하는 핸들을 받아서 사용하면 된다. 디폴트 값 GDI 오브젝트 핸들 타입 설명 디폴트 펜 HPEN 선을 그릴 때 사용 검정색의 가는 실선 브러쉬 HBRUSH 면을 채울 때 사용 흰색 폰트 HFONT 문자 출력에 사용 시스템 글꼴 비트맵 HBITMAP 비.. 2024. 3. 9.
[API] 문자열 출력 TextOut() & DrawText() Win32 API에서 문자열 출력을 하기 위해서는 아래의 함수를 사용한다. BOOL TextOut(HDC hdc,int nXStart,int nYStartm LPCTSTR lpString, int cbString); 첫 번째 인자는 DC의 핸들이고, 두 번째,세 번째 인자는 문자열이 출력될 X좌표,Y좌표이다. 윈도우의 작업영역 원점을 기준으로 한다. 네 번째 인자는 출력할 문자열을 담고 있는 문자열형 포인터이고 마지막 인자는 출력할 문자열의 길이이다. TextOut(hdc, 300, 10, str, _tcslen(str)); ReleaseDC(hwnd, hdc); 스켈레톤 코드에 추가하면 //0307 Textout.cpp #pragma comment (linker, "/subsystem:windows").. 2024. 3. 7.
[API] DC(Device Context) 란? DC(Device Context)란? DC란 출력에 필요한 모든 정보를 가지는 구조체이며 GDI 모듈에 의해 관리된다. 예를 들어 문자열의 폰트, 선의 색상과 굵기, 채움 무늬와 색상, 나중에 나오는 그리기 모드 등 출력에 필요한 정보를 DC(Device Context)라고 한다. 그전에도 윈도우의 핸들을 얻었듯이 윈도우를 만들고 그림을 그리려면 DC의 핸들이 필요하다. DC는 출력 장치에 출력을 할 때 사용하는 구조체라고 생각하면 된다. DC는 하나의 장치에 연결되어 있다. 사용자는 DC에 출력을 하면 DC 구조체 속 안에 있는 여러가지 속성에 의해서 DC가 연결되어 있는 장치에 출력된다. DC는 하나의 메시지를 처리하는 동안 핸들을 얻고 제거해야 한다. 즉 생성 -> 사용 -> 소멸의 과정이 반드시 .. 2024. 3. 6.
[API] 메시지 프로시저 호출하기 SendMessage & PostMessage SendMessage & PostMessage SendMessage : 비큐메시지 즉 프로시저를 직접 호출 한다. PostMessage : 큐메시지 메시지 큐에 메시지를 저장한다. 위 함수들을 이용해서 사용자 정의 메시지를 등록하고 사용할 수 있다. #include #include #define WM_MYMESSAGE WM_USER+100 LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch( msg ) { case WM_MYMESSAGE: { TCHAR buf[20]; wsprintf(buf, TEXT("%d+%d=%d"), wParam, lParam, wParam+lParam); MessageBox(h.. 2024. 3. 6.
[API] 메시지 큐에서 메시지 가져오기 메세지 루프에서 제일 중요한 함수는 메시지를 가져 오는 함수이다. GetMessage 함수는 가장 일반적인 방법이다. 스레드 메시지 큐에서 메시지를 가져오는데 메시지가 없으면 아무것도 리턴하지 않고 기다린다. 무한으로 대기 상태인 것이다. 유휴 시간을 활용하는 방법또한 존재한다. PeekMessage 함수를 이용하는 방법인데 PeekMessage 함수는 메시지큐에 메시지가 없어도 즉각 리턴해준다. BOOL PeekMessage(LPMSG lpMsg, HWND hwnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemoveMsg) 리턴 값이 TRUE이면 메시지가 있다는 것이고 리턴 값이 FALSE이면 메시지가 없다는 것을 알 수 있다. 2024. 3. 6.
[API] 스켈레톤 기본 코드를 이용해서 기능 구현하기 학교에서 했던 실습내용이다. 실습 내용은 마우스가 움직일 때 타이틀바에 마우스 좌표를 출력시키는 것이다. 일단 기본 스켈레톤 코드를 복사하자. //05_skeleton코드.cpp #pragma comment (linker, "/subsystem:windows") #include #include LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CREATE: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, msg, wParam, lParam); } int WINAPI _tW.. 2024. 3. 6.
[API] skeleton 코드 API 프로그래밍 시 복사해서 사용할 기본 코드 이다. //0305 #pragma comment (linker, "/subsystem:windows") #include #include LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_CREATE: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, msg, wParam, lParam); } int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR lpCmdLine, int.. 2024. 3. 6.
[API] 메시지 ~ 윈도우 프로시저(Window Procedure) 란? 윈도우 프로시저(Window Procedure) 우선 윈도우는 기존의 절차적인 방식의 도스와 달리 메세지를 통한 운영체제 이다. 윈도우에서 실행되는 응용 프로그램은 시스템이 보내는 메세지를 기다린다. 이를 이해하기 위해선 먼저 윈도우 프로시저가 먼지 알아야 한다. 윈도우 프로시저(Window Procedure)란 윈도우 클래스당 하나씩 배정되며 메세지에 대응해준다. 프로시저의 기본 문법이다. LRESULT CALLBACK WndProc(HWND hWNd, UINT iMessage, WPARAM, wParam, LPARAM lParam); hWnd 이 메시지를 받을 윈도우 핸들이다. 우리가 흔하게 앞에서 보던 윈도우 핸들이랑 같다. 한 클래스로부터 여러 개의 윈도우가 만들어졌을 경우는 어떤 윈도우로 전달된.. 2024. 3. 6.