본문 바로가기

Study Memos/Windows Programming

(66)
Win32 개발 팁 1. Direct2D 관련 코드는 Release 함수를 자주 사용하고, Release 후에 해당 객체를 NULL로 해주어야 함. -> C 언어를 주로 사용하는 사람들은 전처리기를 구성해서 사용 ex) #define TW_Release(x) {if(x != NULL){ x->Release(); x = NULL;}} -> C++ 로 클래스화하여 윈도우를 관리할 때에는 inline 함수를 사용하는 것도 방법임
Direct2D로 그림 파일을 읽어 출력하기 (Section 44) 참고> blog.naver.com/tipsware/221127333767 1. Direct2D에서 제공하는 디코더(Decoder)를 사용하면 다양한 이미지 파일을 읽어서 비트맵 형식으로 구성 할 수 있음. 2. WIC(Windows Imaging Component) : 각종 이미지(영상)를 압축하거나 해제 또는 변환하는 컴포넌트 -> WIC를 사용하여 읽은 이미지 정보는 Direct2D에서 사용 가능한 형식으로 변환 가능. -> 즉, WIC 객체로 이미지 파일을 읽어서 Direct2D 용 이미지로 변환하고 사용하면 됨. 3. WIC는 d2d1.h 헤더파일에 포함되어 있지 않음 -> Direct2D를 사용한다고 해서 무조건 WIC를 쓰는 건 아니기 때문. -> WIC를 사용하려면 Wincodec.h 헤더파..
Direct2D (Section 43) 참고> blog.naver.com/tipsware/221125856649 1.Direct2D: GDI를 사용하는 것보다 좀 더 좋은 품질의 그림을 그릴 수 있는 기술 -> GDI+ 처럼 고해상도 그래픽과 'AntiAlias' 특성을 기본으로 사용 가능 -> 그래픽 장치의 그리기 가속 기능이나 그래픽 카드가 제공하는 여러 가지 특성을 직접 사용 가능하기 때문에 그래픽 출력 속도는 향상시키면서 CPU의 사용률은 오리혀 낮출 수 있음. -> 이와 더불어, GDI+와 달리 원격으로 접속한 시스템 또는 가상 머신에서 동작하는 프로그램에서도 그대로 사용 가능하기 때문에 GDI+에서 문제가 되는 상황을 많이 해결할 수 있음. 2. CoInitializeEx 함수: Direct2D는 COM(Component Objec..
GDI+ (Section 42) 참고> blog.naver.com/tipsware/221123175566 1. GDI는 1990년대 초반(나랑 나이가 비슷..)에 만들어진 개념이어서 계속 발전하는 그래픽 장치의 특성을 반영하지 못함. -> 이를 개선하기 위해 1990년대 후반에 GDI에 새로운 출력 기능이 추가된 GDI+가 등장함. (예를 들면 'AntiAlias' 기능 등) -> GDI+를 사용하면 출력 품질을 향상시킬 수 있고 BMP가 아닌 PNG나 JPEG와 같은 이미지도 쉽게 사용 가능함. 2. GDI+ : GDI를 수정하지 않고(즉, GDI로 만들어진 기존 프로그램과의 호환성을 유지하면서) 향상된 그래픽 장치의 특성을 사용할 수 있는 추가적인 라이브러리를 제공하는 기술 3. GDI+도 GDI와 마찬가지로 Win32 API 또는..
Timer (Section 41) 참고> blog.naver.com/tipsware/221128414845 1. SetTimer 함수: Timer를 생성하는 함수; 일정한 시간 간격으로 반복적인 작업을 하고 싶을 경우 Timer를 많이 사용함 2. nIDEvent 파라미터: Timer의 고유 아이디; 한 윈도우에서 여러개의 Timer를 가질 수 있기 때문에 각 타이머마다 고유 아이디가 있어야 함. 3. 이미 사용하고 있는 Timer 아이디를 다시 사용할 경우 Timer를 중복 생성하지 않고 기존 내용을 덮어씀. 4. Timer의 시간 간격은 최소 0.01(10ms)초 이상 2147483647 이하여야 함. Timer는 우선순위가 낮은 작업이기 때문에 프로그래머가 0.1 초로 설정한다고 해서 정확하게 0.1초로 설정되지 않음. 아주 작은 ..
SetDCPenBrush 함수 (Section 39) 참고> blog.naver.com/tipsware/220988622624 SetDCPenColor 함수에 대하여 1. 먼저 봐야 할 내용들 이 함수는 GetStockObject 함수에 DC_PEN라는 옵션을 사용했을 때만 사용... blog.naver.com 1. DC에 연결된 GDI Pen Object의 색상을 자주 변경해야 할 경우 SelectObject 함수도 그만큼 자주 호출되기 때문에 비효율적임. -> 이를 개선하고자 SelectObject함수의 호출을 줄이는 방법이 있음 -> SetDCpenColor 함수를 사용하면 됨 -> GetStockObject 함수의 DC_PEN 옵션을 사용했을 때에만 사용 가능함 2. SetDCPenColor 함수: DC에 설정된 PEN 객체의 색상을 변경하는 함수 ..
SetDCBrushColor 함수 (Section 38) 참고> blog.naver.com/tipsware/220988598651 1. DC에 연결된 GDI Brush Object의 색상을 자주 변경해야 할 경우 SelectObject 함수도 그만큼 자주 호출되기 때문에 비효율적임. -> 이를 개선하고자 SelectObject함수의 호출을 줄이는 방법이 있음 -> SetDCBrushColor 함수를 사용하면 됨 -> GetStockObject 함수의 DC_BRUSH 옵션을 사용했을 때에만 사용 가능함 2. SetDCBrushColor 함수: DC에서 가지고 있는 BRUSH 객체의 색상을 변경하는 함수 -> 굳이 DC의 BRUSH 객체를 갈아낄 필요없이 색상만 바꿔줄 수 있다. -> 반환 값으로 BRUSH 객체의 기존 색상을 리턴함. 3. 주의사항 -> SetD..
CreateHatchBrush 함수 (Section 37) 참고> blog.naver.com/tipsware/221121332281 1. 도형을 가득 채우고 싶다면 CreateSolidBrush 함수를 사용하지만, 도형을 다양한 형태의 선으로 채우고 싶다면 CreateHatchBrush를 사용해야 함. 2. CreateHatchBrush 함수: 특정 형태의 선으로 도형을 채우는 함수 -> 선의 모양(HS_ 로 시작하는 값; HS는 Hatch Style의 약자) 과 선의 색상을 파라미터로 받은 후 Hatch brush의 핸들 값을 반환함.