프로그래밍 관련/Win API

그럼 비트맵 출력 코드를 살펴보겠습니다. (WIndows API - #9 -1. 그래픽 처리 (Old를 같이 쓰는 이유) (1) 에서 설명된 내용은 제외하였습니다.) 먼저 , 윈도우즈에서는 비트맵을 곧바로 화면 DC로 출력하는 함수를 제공하지 않는다고 합니다. 비트맵의 크기가 다른 데이터에 비해 크기 때문에 출력속도가 낮기 때문이라고 합니다. 이 때문에 해당하는 파일을 먼저 읽어드리고(그리고) 난후에 출력해야하기 때문에 메모리 DC라는것을 만들어 화면 DC에 고속으로 복사하여 출력합니다. (그려지는 과정이 보여지지 않도록) #include "resource.h" resource.h 파일을 포함시킵니다. 해당 파일에는 추가한 이미지에 대한 정보가 들어있습니다. HDC hdc,MemDC; 메모리 DC라는것을..
윈도에 비트맵을 띄워봅시다! 게임을 만들거나 또는 어떠한 프로그램을 만들때 비트맵은 아주 중요한 리소스 입니다. 게임에서는 캐릭터, 배경 등등 거의 모든것을... 프로그래밍에서는 보다 멋진 인터페이스를 제공할 수도 있을 것 입니다. 아무튼 이제 이미지를 출력해보도록 하겠습니다. 먼저 리소스에 비트맵을 추가합니다. 비트맵 추가하는 법 1. 리소스 파일 -> 추가 -> 리소스를 클릭합니다. 2. 리소스 추가 항목에서 Bitmap을 클릭하고 가져오기를 누릅니다. (새로 만드셔도 됩니다만..그럴 분은 없겠죠?) 정상적으로 리소스를 추가하셨다면, "resource.h" 해더 파일과 비트맵이 추가되어 있습니다. 그 다음 아래와 같은 코드를 입력하시면 됩니다. #include "resource.h" LRESULT C..
기본적인 사각형을 그리는 코드를 조금 자세히 살펴봤으니 해당하는 구조로 사용해야하는 이유에 대해서실험을 통해 알아보도록 하겠습니다. * OLD를 왜 써야 하는가? 이 게시물에 가장 중요한 주제입니다. 간단히 말해서 기존에 생성한 GDI 오브잭트를 삭제하기 위해서 입니다.계속해서 GDI 오브잭트를 생성하고 삭제를 하지 않는 다면, 나중에는 리소스가 쌓여서 프로그램에 악영향을 미치게 될 것 입니다. 물론 간단한 프로그램은 괜찮겠지만 지속적인 추후 프로그래밍을 위해 생성된 오브잭트와 읽어드린 파일,생성한 힙 메모리 등은 당연히 해제를 해줘야 하는것이 좋은 습관이기 때문입니다. 그럼 OLD를 사용하는 이유에 대해서 알아보도록 하겠습니다. 1. 기존에 선택한 속성의 GDI 오브잭트는 선택된 상태에서 삭제가 되지 ..
그 동안 윈도우에 여러가지 그래픽을 출력할때 습관적으로 Old를 같이 써왔습니다.왜 Old를 같이 써야하는지... 이유도 모르고 말이죠...(적어도 지금까지의 저는 그랬습니다...)그래픽을 출력하는 함수와 순서 부분부터 OLD를 사용하는 부분까지 자세히 분석해보겠습니다. HDC hdc;PAINTSTRUCT ps;HBRUSH MyBrush , OldBrush; switch (iMessage){case WM_PAINT: {hdc = BeginPaint(hWnd , &ps); MyBrush = (HBRUSH)GetStockObject(GRAY_BRUSH);OldBrush = (HBRUSH)SelectObject(hdc , MyBrush);Rectangle(hdc , 100 , 100, 200 , 200);Se..
1. 사각형 충돌 사각형의 도형간의 출력처리에 관한 함수입니다. 먼저 사각형이 서로 부딫혔을때에 대한 처리를 진행해야 하는데 따로 함수가 있기는 하지만 함수를 사용하지 않고 처리하게 되면 조건이 너무 번거롭게 됩니다. 아마 아래와 같은 형식의 조건문이 필요할 것 입니다. if ( RC_Left.left RC_Right.left && RC_Left.bottom > RC_Right.top) 모든 사각형끼리의 각 위치의 값을 더해야 하지만 다음 함수를 통해 쉽게 해결 할 수 있습니다. IntersectRect 해당 함수는 두가지의 사각형의 교차점을 계산하고 서로 교차하는 지점이 있는지를 확인해주는..
0. InvalidateRect 우선 지속전인 화면 표시를 위해서는 InvalidateRect 라는 함수가 필요합니다. 해당 함수는 특정 영역을 업데이트 (다시 그리는)는 함수입니다. BOOL InvalidateRect( _In_ HWND hWnd, _In_ const RECT *lpRect, _In_ BOOL bErase ); 매게 변수 의미 hWnd 업데이트할 윈도우의 핸들값을 입력합니다. 해당부분이 NULL일 경우 모든 윈도우를 다시 그립니다. *lpRect 업데이트할 영역을 설정합니다. RECT 구조의 좌표로 입력할 경우 해당 영역에 , NULL 일 경우 전체 영역이 설정됩니다. bErase 영역안에 배경이 업데이트 될때 제거될 것인지의 여부를 결정합니다. 값이 true이면 BeginPaint 함..
Window API에서 처음 문자열 출력을 할때 당황하지 않을 수 없었습니다. 도스 콘솔 시절에서 사용했던 printf 또는 std::cout 같은 함수를 사용하다가 출력 좌표와 HDC 값등..추가된 부분이 너무 많기 때문입니다.. 또한 유니코드와 멀티바이트등의 구분 또한 간단하게 문자 또는 문자열을 출력하고 싶은 작성자에 멘탈을 공격하기에 충분했습니다... 아무튼 Window API에서 제공하는 문자출력 방법에 대해서 알아보도록 하겠습니다. TextOut : 현재 선택된 폰트 , 배경색 및 글자색을 사용하여 지정된 위치에 문자 스트링을 기록하는 함수합니다. BOOL TextOut( _In_ HDC hdc, _In_ int nXStart, _In_ int nYStart, _In_ LPCTSTR lpStr..
LPSTR, LPCSTR, LPTSTR, LPCTSTR , LPWSTR, LPCWSTR 출처 - http://egloos.zum.com/pelican7/v/1768951 http://blog.naver.com/kkan22/80050248215 윈도우서는 string 처리를 위해서 char* 형을 그대로 쓰기보다는 위와 같은 표현으로 대치해 사용함으로써, 개발의 편의성을 돕고있다고 합니다. LP는 Long Pointer의 약어로 옛 윈도우의 유산입니다. :과거 Windows 3.1시절에는 포인터는 모두 16bit였고, 24bit 메모리를 long Pointer라는 것을 통해 extended memory 라는 이름으로 관리했었습니다. (현재 .Net에서는 64bit pointer를 , 그 이전에는 32bit..
QA Engineer  - P군
'프로그래밍 관련/Win API' 카테고리의 글 목록 (2 Page)