컴퓨터 공부/Win32 API 프로그래밍

[4월 29일 3교시] 리소스2 + 그래픽1

려리군 2009. 4. 29. 16:03

아이콘 및 커서 추가

리소스에 추가해 준 뒤 윈도우 클래스에 다음 소스를 추가하면 된다.

WndClass.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(커서리소스아이디));

WndClass.Icon = LoadIcon(hInstance, MAKEINTRESOURCE(아이콘리소스아이디));


Accelerator

독립된 형태의 리소스.

Alt와 Ctrl키와 동시에 함께 눌러 사용하는 단축키.


1. ID, Key, Modifiers(Ctrl, Alt, Shift), Type 필드로 구성된 Accelerator table 작성.

 - Menu item ID와 Accelerator의 ID는 같아야 한다.

2. 리소스에 추가해 준 뒤 윈도우 메세지 루프 부분에 다음 소스를 추가하면 된다.

HACCEL hAccel;

hAccel = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1));

while(GetMessage(&msg,NULL,0,0))

{

if(!TranslateAccelerator(hWnd,hAccel,&msg))  // 키보드 메세지를 WM_COMMAND 메세지로 변경.

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

}


문자열 테이블
문자열에 ID를 부여 테이블화 시킴
장점
 - 문자열과 코드 분리
 - 문자열만 따로 관리
 - 전문 디자이너가 문자열만 따로 작성
 - 다국어 버전 가능
 - 같은 ID를 통해 다국어 버젼 프로그램 제작 편리.

int LoadString(HINSTANCE, UINT, LPTSTR, int);

HINSTANCE(1): 프로그램 인스턴스 핸들

UINT(2) : 리소스 ID

LPTSTR(3) : 문자열을 읽을 버퍼

int(4) : 버퍼의 크기


그래픽

GDI 객체 : 그래픽 출력에 사용되는 도구

DC : GDI 객체들을 모아 놓은 것. 선택한 GDI객체로 모양, 속성 변경 가능.

Default GDI 객체

출처 : http://www.winapi.co.kr/win32lec/lec6/lec6-1-1.htm

GDI 오브젝트핸들 타입설명디폴트
HPEN선을 그을 때 사용된다.검정색의 가는 선
브러시HBRUSH면을 채울 때 사용된다.흰색
폰트HFONT문자 출력에 사용되는 글꼴시스템 글꼴
비트맵HBITMAP비트맵 이미지선택되지 않음
팔레트HPALETTE팔레트선택되지 않음
영역HRGN영역선택되지 않음

스톡 오브젝트

윈도우가 기본적으로 제공하는 GDI 객체. 언제든 사용가능.

HGDIOBJ GetStockObject(int fnObject);

fnObject설명
BLACK_BRUSH검정색 브러시
GRAY_BRUSH회색 브러시
NULL_BRUSH투명 브러시
WHITE_BRUSH흰색 브러시
DKGRAY_BRUSH짙은 회색 브러시
LTGRAY_BRUSH옅은 회색 브러시
BLACK_PEN검정색 펜
WHITE_PEN흰색 펜
NULL_PEN투명 펜
ANSI_FIXED_FONT고정폭 폰트
ANSI_VAR_FONT가변폭 폰트
DEFAULT_PALETTE시스템 팔레트

출처 : http://www.winapi.co.kr/win32lec/lec6/lec6-1-2.htm

리턴 : fnObject에 해당하는 GDI객체 핸들


색상

typedef DWORD COLORREF;

0x00BBGGRR // 00자리는 alpha blend

#define RGB(r,g,b) ((COLORREF)(((BYTE)(r) | ((WORD)((BYTE)(g))<<8)) | (((DWORD)(BYTE)(b))<<16)))

GetRValue(rgb) - COLORREF에서 빨간색 값 추출.

GetGValue(rgb) - COLORREF에서 초록색 값 추출.

GetBalue(rgb) - COLORREF에서 파란색 값 추출.


GDI 객체 사용절차


펜 

선을 그을 때 사용하는 GDI 객체.

HPEN CreatePen(스타일, 폭, 색깔);

스타일 : PS_SOLID, PS_DASH, PS_NULL

폭 : 두께를 지정. 0이라고 1로 설정. PS_DASH면 두께는 1.

색깔 : 펜의 색깔을 지정.


브러시

채워지는 면을 채색하는 용도로 사용하는 GDI 객체.

HBRUSH CreateSolidBrush(색깔);

단색의 브러시를 생성

색깔 : 브러시의 색깔을 지정.

HBRUSH CreateHatchBrush(스타일, 색깔);

특별한 패턴과 그 패턴의 색깔을 가진 브러시를 생성.

스타일 : HS_BDIAGONAL, HS_CROSS, HS_DIAGCROSS, HS_FDIAGONAL, HS_HORIZONTAL, HS_VERTICAL

색깔 : 브러시의 전경색을 지정.


그리기모드

도형이 그려질 때 원래 그려져 있던 그림과 새로 그려지는 그림과의 관계를 정의

int SetROP2(HDC hDC, int fnDrawMode);

그리기 모드를 설정한다.

리턴 : 성공시 이전 그리기 모드, 실패시 0

int GetROP2(HDC hDC);

현재 그리기 모드 상태를 얻는다.

리턴 : 그리기 모드 값. 다음 표 참고.


그리기 모드설명
R2_BLACK항상 검정색이다.
R2_WHITE항상 흰색이다.
R2_NOP아무런 그리기도 하지 않는다.
R2_NOT원래의 그림을 반전시킨다.
R2_COPYPEN원래의 그림을 덮어버리고 새 그림을 그린다.
R2_NOTCOPYPEN새 그림을 반전시켜 그린다.
R2_MERGEPENOR연산으로 두 그림을 합친다.
R2_MASKPENAND연산으로 겹치는 부분만 그린다.
R2_XORPENXOR연산으로 겹치는 부분만 반전시킨다.