본문 바로가기
코스웨어/15년 스마트컨트롤러

20151118 업무일지 -여지윤- Win32 API 5

by 알 수 없는 사용자 2015. 11. 18.
728x90
반응형

1~8교시

★S/W☆


● Win32 API


□ Create Font


- 폰트를 만들기 위해서는 CreateFont 함수를 사용하며 이 함수가 리턴해 주는 핸들을 HFONT형의 변수에 대입해 주면 된다. CreateFont 함수는 다음과 같이 아주 복잡한 모양을 가지고 있다.


- 인수만 해도 자그마치 14개나 될 정도로 복잡하다. 그만큼 글꼴이라는 것이 복잡한 모양을 가질 수 있다는 뜻이다. 개별 인수의 의미를 보기 쉽게 표로 정리하였다.




□ Font.dsw


- 폰트 오브젝트를 사용하는 아주 간단한 예제를 만들어보자. 펜이나 브러시와 거의 동일한 방법으로 만들고 사용하면 된다.


- 해당하는 폰트오브젝트를 이용하여 다음과 같은 소스와 결과를 알 수 있다.



- 위의 내용을 인자가 아니라 변수를 이용해서 풀어 낸다면 다음과 같은 코드를 만들 수가 있다.

 


- 출력 결과는 물론 CreateFont 함수를 사용한 것과 동일하다. 


- CreateFont 함수의 인수에 폰트의 특징을 모두 열거해 주는 방법에 비해 LOGFONT 구조체를 사용하는 방법은 몇가지 장점을 가지고 있다. 


- 여러벌의 폰트 객체를 만들어야 할 때 LOGFONT의 멤버중 일부만을 변경하여 재사용할 수 있으며 또한 LOGFONT 구조체 배열을 사용하면 사용할 폰트의 목록을 미리 작성해 놓을 수도 있다.


□ 문자열의 색상


- 폰트 오브젝트외에 출력되는 문자열에 영향을 주는 여러가지 함수가 있다. 3장에서 살펴본 문자열 정렬 상태를 지정하는 SetTextAlign 함수외에 다음 세 함수에 대해 알아보자


COLORREF SetTextColor(HDC hdc, COLORREF crColor);

COLORREF SetBkColor(HDC hdc, COLORREF crColor);

int SetBkMode(HDC hdc, int iBkMode);


- 함수의 이름이 무척 설명적이기 때문에 이름만 보고도 어디다 쓰는 물건인지 쉽게 알 수 있을 것이다. SetTextColor는 Text의 Color를 Set하는 함수이며 SetBkColor은 글자 뒤쪽의 배경색상을 지정하는 함수이다. 둘 다 COLORREF형의 인수를 취하므로 RGB 매크로 함수를 사용하여 원하는 색상을 설정하도록 한다.


- 문자색으로 빨간색을 주고 배경색으로 초록색을 주면 초록색 바탕에 빨간색의 글자가 출력될 것이다. 세번째 함수는 배경색상을 사용할 방법을 설정한다. OPAQUE와 TRANSPARENT 두가지 옵션중 한가지를 선택할 수 있으며 디폴트는 OPAQUE이다.



- 위의 내용을 그대로 사용하여 추가되는 코드 부분만 삽입하면 결과를 출력 할 수 있다.



□ 글자 회전시키기


- 이번에는 좀 색다른 글자 모양을 만들어보자 CreateFont의 세번째 인수인 nEscapement를 변경시키면 문자열의 각도를 바꾸어 가며 회전 시킬수 있다.


- 다음과 같은 코드를 작성하면 결과를 추출 해 낼 수 있다.


- 도스에서는 꿈도 꾸기 어려운 이런 일을 이렇게 간단하게 해 낼 수 있다. CreateFont 함수의 인수를 여러 가지 방법으로 변형시켜 보면 다양한 글꼴을 만들어 사용할 수 있을 것이다. 별로 중요한 예제는 아니지만 이런 식으로도 폰트를 사용할 수 있다는 것과 지루한 실습에 재미있는 예제를 하나 보여주고 싶어 작성해 본 예제이다.


□ 컨트롤의 정의


- 컨트롤(Control)이란 사용자와의 인터페이스를 이루는 도구이다. 인터페이스를 이룬다는 말은 사용자로부터 명령을 받아들이고 출력 결과를 보여준다는 뜻이다. 프로그램은 실행중에 끊임없이 사용자와 통신을 하는데 컨트롤을 통해 명령과 정보를 받아들이고 또한 컨트롤을 통해 실행 결과를 사용자에게 보고한다


- 윈도우를 만들 때는 WNDCLASS형의 구조체를 정의한 후 RegisterClass 함수를 사용하여 등록한 후 CreateWindow 함수를 호출하여 윈도우를 만들어야 한다. 그러나 컨트롤은 윈도우즈가 운영체제 차원에서 제공해주기 때문에 윈도우 클래스를 만들어 사용할 필요없이 윈도우즈에 미리 정의되어 있는 클래스를 사용하기만 하면 된다. 미리 정의된 윈도우 클래스는 다음과 같다.


- 윈도우 클래스를 따로 만들필요 없이 CreateWindow 함수의 첫번째 인수로 미리 정의된 윈도우 클래스를 주면 해당 컨트롤을 만들 수 있다.


□ Button


- 컨트롤중에 제일 간단하고 익숙한 버튼 컨트롤을 만들수 있다. 메인 윈도우의 작업영역에 두개의 버튼 컨트롤을 배치두고 사용자가 이 버튼을 누르면 메시지 상자를 보여주는 예를 보일 것이다.


- lpszClass 문자열을 프로젝트명으로 정의하여 사용하고 있지만 , 프로젝트의 경우 Button이라는 클래스 명은 윈도우가 미리 사용하고 있으므로 사용할 수가 없다.




728x90