[[프로그래밍_NOTE]]/Window Programing 26

메모리 DC , 더블 버퍼링

발췌 : 윈도우즈 API 정복 1 , 김상형(한빛 미디어) 윈도우즈는 비트맵을 곧바로 화면 DC로 출력하는 함수는 제공하지 않는다. ..(중략) 왜냐하면 비트맵은 크기가 큰 데이터 덩어리이며 따라서 출력 속도가 형편없이 느리고 화면으로 곧바로 출력할 경우 여러가지 꼴사나운 현상이 발샐할 수 있기 때문이다. 마치 파일에서 한 바이트 단위로 읽어 들이는 함수가 없는 것과 같은 이유인데 파일을 읽고 싶으면 반드시 열기 , 읽기 , 닫기의 과정을 거쳐야 한다. ( ※ 현대의 하드웨어 환경이 좋아져 비트맵을 직접 출력하는 함수가 있어도 별다른 문제가 없다. CPU의 속도가 빨라진 것도 이유이지만 , 더 주요한 이유는 요즘 출시되는 그래픽카드의 대부분이 비트맵 출력을 하드웨어적으로 처리하는 가속 기능을 제공하기 때..

GetStockObject() , SelectObject() , CreatePen()

※ 함수의 원형 HGDIOBJ GetStockObject( int fnObject ); HGDIOBJ SelectObject( HDC hdc , HGDIOBJ hgdiobj ); HPEN CreatePen( int fnPenStyle , int nWidth , COLORREF crColor ); /******************************************************************************** ... ... ① 변수선언 HBRUSH MyBrush; HBRUSH OldBrush; HPEN MyPen; HPEN OldPen; ... ... ② 새 브러쉬, 팬을 생성 MyBrush = (HBRUSH)GetStockObject(GRAY_BRUSH); MyPen = ..

Callback Function (콜백함수)

참고 - 윈도우즈 API 정복 1 [김상형 지음] 일반적으로 API함수들은 운영체제가 제공하며 프로그램에서는 이 함수들을 호출해서 운영체제의 서비스를 받는다. 예를 들어 도스의 시스템 콜 함수를 호출하여 디스크 입출력을 한다든가 윈도우즈의 TextOut함수를 호출하여 문자열을 출력하는 경우가 이에 해당한다. 응요 프로그램이 운영체제에 내장된 함수를 호출하여 원하는 작업을 하는 것이다. 반면 콜백함수는 응용 프로그램이 제공하며 운영체제가 필요할 때 호출하는 함수이다. 홓출되는 방향이 거꾸로 되었기 때문에 콜백이라고 부르는 것이다. 굳이 우리말로 번역한다면 "거꾸로 호출되는 함수"정도로 번역할 수 있겠으나 마땅한 번역이 없으므로 그냥 원주민 발음대로 콜백이라고 부른다. 즉 "운영체제(system)에 의해 호..

윈도우즈 API의 동적 DLL 中 GDI(Graphic Device interface) , DC(Device Context)

1. Kernel 2. USER 3. GDI (Graphic Device Interface) ▶ DC (DeviceContext ) : 출력에 필요한 모든 정보를 가지는 데이터 구조 : GDI 오브젝트를 모아 놓은 것 ▶ Ex) LineTo(hDc , X , Y) - 선을 긋기 위한 정보들을 모두 모아 DC라는 구조체를 만들고 LineTo함수는 X,Y값 이외에도 DC핸들을 넘겨받아 그 값을 사용한다. (그리기 함수들이 참조하는 원점의 정보 (스크린,윈도우 좌표)등의 정보도 제공한다. ▶ DC를 얻는 방법 2가지 1. HDC GetDC(HWND hWnd); int ReleaseDC(HWND hWnd , HDC hDC); ex) HDC hdc hdc = GetDC(hWnd); /* 각종 출력문에서 hdc를 ..

WSADATA 구조체

typedef struct WSAData{ WORD wVersion; // WS2_32.dll에서 로드된 윈도우즈 소켓의 버전 WORD wHighVersion; // 로드한 DLL이 지원하는 윈도우즈 소켓의 상위 버전. // (일반적으로 wVersion인자와 동일) char szDescription[WSADESCRIPTION_LEN+1]; // NULL로 끝나는 아스키 스트링 값. // (적재된 WS2_32.dll에서 소켓에 관련된 설명 문자열을 카피) char szSystemStatus[WSASYS_STATUS_LEN+1]; // NULL로 끝나는 아스키 스트링 값. // (시스템의 각종 상태를 알수 있도록 해준다.) unsigned short iMaxSockets; // 어플리케이션에서 사용할 소켓의..

netstat , tracert , ping 주요옵션

netstat /*현재 로컬 호스트의 네트워크 연결 상태를 보여준다. 이 명령어를 이용하면, 로컬 호스트에 연결된 소켓의 정보나 라우팅 상태는 물론 연결을 시도 중이거나 연결된 대상을 볼수있다.*/ -r : 라우팅 테이블을 보여준다. -a : 모든 연결과 listening port 에 대한 정보를 보여준다. tracert /*목적지까지의 링크 상태를 보여준다. 목적지까지 경유하는 과정, 경유상태를 보여준다.*/ -h : 목적지까지의 최대 hop카운트 -w : 응답이 오기까지의 최대 시간 ping /*목적지까지의 네트워크의 상태를 체크한다. 즉, 목적지의 호스트가 응답하는 시간(echo)을 체크한다. 이 명령어를 통해서 목적지까지의 네트워크의 응답속도와 연결가능 여부등을 체크*/ -n count : 목적지..

NIC , NDIS , Daemon(system daemon) , inetd , HOP(Hop Count)

NIC ( Network Interface Card ) NIC는 네트워크상에서 다른 컴퓨터 시스템에 데이터를 보내거나 받을 때 사용하기 위한 하드웨어를 말한다. 이런 종류의 하드웨어는 모뎀이나 랜카드 등이 해당되는데 , 각각의 NIC는 자신에게 주어진 유일한 식별번호를 가지고 있다. 이 식별 번호는 네트워크에서 아주 중요하게 쓰인다. NDIS ( Network Driver Interface Specification ) NDIS는 Microsoft 사와 3Com 사가 개발한 것으로 네트워크 장치의 드라이버를 연결하는 일종의 인터페이스이다. 이 인터페이스를 통하여 프로그래머는 상대 시스템의 장치의 종류에 상관없이 NDIS만을 호출하여 프로그래밍을 할 수 있도록 한다. DAEMON (System Daemon)..

로비채팅 (api)

기본적인 로비채팅 기능을 구현한 메신저. /***************************************** 서버는 MS SQL2005 DB연동이 필요 SQL 인증 방식을 통한 ODBC 접속 서버 : SeungHwan 사용테이블 : Lobby-pj 접속id : sql 접속pw : sql-psw ******************************************/ 1. 다 대 다 채팅(로비채팅) 가능 2. 친구등록후 1:1 채팅 가능 3. p2p 게임은 아직 구현하지 않음

EzChatter(TCP 방식) - api로 구현

/* 간단하게 구현된 1:1 방식의 채팅 프로그램이다. 실제 네트워크 어플리케이션 에서는 이러한 방법은 쓸 수 없으며, 이것은 단지 문자열에 대해서만 동작할 수 있으며 다른 종류의 데이터는 처리하는 것이 곤란하다. 1. 단일 접속만을 허용한다. 2. 한쪽은 서버 , 한쪽은 클라이언트 3. 채팅 이외의 기능은 가지지 않는다. 4. api로 구현되었다. */ ============================================================================= 1. 실행후 wait client라는 문자열을 입력하면 Server 상태로 Client의 접속을 대기한다. [ 창을 보면 현재 server의 IP정보를 확인할 수 있다. ] 2. 또 프로그램을 실행후,(client)..

자신의 IP를 알 수 있는 코드

char* ReturnMyIpAddress() { int re; char name[255], *ip = NULL; PHOSTENT phostinfo; re = gethostname(name , sizeof(name)); if(re == 0) { if((phostinfo = gethostbyname(name)) != NULL) { ip = inet_ntoa(*(struct in_addr *)*phostinfo->h_addr_list); } } return ip; } /***************************************************************************** gethostbyname()함수를 호출하면 인터넷 주소를 리턴받을수 있는데, 문제는 이 함수가 리턴하는..