2015-11-18
*WinAPI
#Create Font
폰트도 펜이나 브러시와 마찬가지로 GDI 오브젝트이다. 폰트에 대한 지정을 하지 않으면 디폴트가 사용되지만 폰트를 만들어 DC로 전송한 후 면자열을 출력하면 DC에 전송된 폰트를 사용하여 문자열을 출력한다.
폰트를 만들기 위해서는 CreateFont 함수를 사용하며 이 함수가 리턴해주는 핸들은 HFONT형의 변수에 대입해주면 된다.
HFONT CreateFont (int nHeight, int nWidth, int nEscapement, int nOrientation, int fnWeight, DWORD fdwItalic, DWORD fdwUnderline, DWORD fdwStrikeOut, DWORD fdwCharSet, DWORD fdwOutputPrecision, DWORD fdwClipPrecision, DWORD fdwQuality, DWORD fdwPitchAndFamily, LPCTSTR lpszFace );
폰트 만들기
기본적으로 펜이나 브러시와 거의 동일한 방법이다.
또다른 방법으로는 LOGFONT 구조체를 사용하여 폰트를 정의하고 CreateFontIndirect 함수로 폰트를 만드는 방법이 있다.
typedef struct tagLOGFONT { // lf LONG lfHeight; |
HFONT CreateFontIndirect( CONST LOGFONT *lplf);
LOGFONT 구조체에서 폰트의 특성을 다 정의하므로 함수는 이 구조체의 포인터만 인수로 전달 받는다.
결과
#문자열의 색상
폰트 외에 출력되는 문자열에 영향을 주는 함수가 있다.
COLORREF SetTextColor(HDC hdc, COLORREF crColor);
COLORREF SetBkColor(HDC hdc, COLORREF crColor);
SetTextColor는 Text의 색을 지정하는 함수이며, SetBkColor은 글자 뒤쪽의 배경 색상을 지정하는 함수이다. COLORREF형의 인수를 취하므로 RGB매크로 함수를 사용하여 원하는 생상을 설정하도록 한다.
반대로 GetTextColor, GetBkColor함수도 있다.
int SetBkMode(HDC hdc, int iBMode);
배경 색상을 사용할 방법을 설정한다. 옵션은 OPAQUE, TRANSPARENT가 있고, 디폴트는 OPAQUE이다.
문자열 색상 및 배경보드 실습
결과
#글자 회전시키기
CreateFont의 세번째 인수인 nEscapenent를 변경시키면 문자의 각도를 회전시킬 수 있다.
CreateFont의 세번째 인수인 nEscapenent를 0-900R까지 100단위로 증가시켜가며, 각도를 10도 씩 증가시켜보았다.
결과
#컨트롤
컨트롤이란 사용자와의 인터페이스를 이루는 도구이다. 사용자로부터 명령을 받아들이고 출력결과를 보여줄 수 있는 도구이다. 컨트롤도 하나의 윈도우이다. 화면상의 일정한 영역을 차지하며 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다.
컨트롤은 윈도우즈가 운영체제 차원에서 제공해 주기 때문에 미리 정의되어 있는 클래스를 사용하기만 하면 된다.
#버튼
버튼 생성
모든 컨트롤은 윈도우이기는 하지만 홀로 사용될 수 없으며 반드시 부모 윈도우의 차일드로 존재해야 한다. 컨트롤은 보통 메인 윈도우가 만들어질 때 즉, WM_CREATE 메세지가 발생 했을 때 만들어 준다. 컨트롤도 하나의 윈도우 이므로 CreateWindow함수를 호출하여 만든다.
CreateWindow("button", "Click Me", WS_CHILD | WS_VISIBLE |BS_PUSHBUTTON,
20, 20, 100, 25, hWnd, (HMENU)0, g_hInst, NULL);
첫번째 인자자는 만들고자 하는 윈도우의 클래스 이다. 컨트롤은 윈도우즈에 의해 미리 윈도우 클래스가 정의되어 있으므로 별도의 윈도우 클래스를 정의할 필요없이 인자에 만들고자 하는 컨트롤의 윈도우 클래스명을 적어주면 된다.
두번째 인자는 타이틀 바에 나타날 윈도우의 제목이다. 컨트롤 종류에 따라서 캡션의 위치가 달라진다.
세번째 인자는 윈도우의 속성값이다. 컨트롤의 경우 예외없이 차일드 윈도우이므로 WS_CHILD 스타일은 반드시 주어야 한다. WS_VISIBLE 스타일도 반드시 주어야 ShowWindow함수를 호출하지 않아도 컨트롤이 나타나게 된다. 그 외 컨트롤에 따른 스타일 값을 추가로 지정해 준다.
네번째부터 일곱번째 인자까지는 좌표와 크기이다.
여덟번째 인자는 컨트롤의 부모 윈도우를 지정하는데 컨트롤은 차일드이므로 반드시 부모가 있어야 한다.
아홉번째 인자는 윈도우에서 사용할 메뉴의 핸들이다. 컨트롤의 경우는 ID를 나타내게 된다. 숫자는 정수형으로 적되 (HNENU)로 캐스팅 해주어야 한다.
열번째 인자는 이 윈도우를 만드는 인스턴스의 핸들이며 마지막 인자는 MDI에서 사용하는 구조체이다.
부모와의 통신
컨트롤들은 자신에게 무슨 일이 일어났을 때 부모에세 통지 메세지를 보내준다. 부모는 차일드가 보내준 메세지를 받아 적절한 처리를 해준다. 모든 메세지는 WM_COMMAD이다.
컨트롤의 아이디는 CreateWindow함수에서 아홉번째 인자에서 지정한 정수값이 들어가서 어떤 컨트롤이 메세지를 보냈는지 알려준다. 통지코드는 왜 메세지를 보냈는가이고 lParam은 메세지를 보낸 차일드 윈도우의 핸들이 온다.
버튼 실습
윈도우가 생성되자마자 CreateWindow를 통해서 버튼을 만들어 준다. 그리고 아이디값을 잘 확인한 후 WM_COMMAND메세지가 전송되었을 때 다시 wParam을 보고 아이디를 추출한 뒤 버튼에 따라서 처리를 해 주면 된다.
결과
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
2015.11.18_개인업무일지_[WIN32API #5]_이량경 (4) | 2015.11.19 |
---|---|
20151118_안향진_API_5 (5) | 2015.11.19 |
20151118 - 홍준모 게임만들기 ( 5일차) (4) | 2015.11.18 |
20151118 수업 / API_5 남수진 (6) | 2015.11.18 |
20151118 업무일지 -여지윤- Win32 API 5 (5) | 2015.11.18 |
2015-11-18 Win32 API 개인업무일지 - 천정호 (5) | 2015.11.18 |
20151118 - WinAPI 일지 엄민웅 (6-5-가. CreateFont), 게임 만들기 (5) | 2015.11.18 |
20151118 -권오민- WinAPI-5일차 (3) | 2015.11.18 |