달력

12

« 2018/12 »

  •  
  •  
  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  
  •  
  •  
  •  
  •  

'Text'에 해당되는 글 2

  1. 2010.05.19 MFC-TextRgn( 게이지에 따른 텍스트 변화 )
  2. 2010.04.19 API-TextOut




프로그램을 인스톨 할때라던가,

특정 게이지가 오르락 내리락 할 때 그 안에 글씨를 상황에 맞춰서 색상 변경을 해주어야 한다.


만약 저안에 글자가 처음엔 빨강색 이였다가, 빨간색 배경이 들어 오면 흰색으로 변경하는 거라고 치자.

그에 따른 소스코드를 파악해 가면서

프로그래머는 역시 사기꾼 이라는 생각이 드는 예제인거 같다.

먼저 실행 결과를 보자.


마치 게이지의 위치에 따라서 글자가 자연스럽게 색상이 변경하는 '것'처럼 보인다.

소스를 보자.

하나하나 집어 가면서 설명을 하자면,
소스에 있는 RgnSize View클래스의 int형 멤버 변수이다.(초기값 250)


무슨 짓을 할지는 모르겠지만, 최초 2개의 Rect를 사용해 사각 영역을 생성해 주었다.
수치를 보니 2개의 사각형을 연달아 그려주고 있다.
여기서 부터 사기는 시작된다.

각각의 사각 영역에 다른 색상을 지정해 주었다.

2개의 사각 영영에 대해서 별도의 영역을 만들어 주고 있다.


다음으로 글자 폰트의 크기, 글꼴을 지정한 후 폰트를 생성하였다.


마지막으로 글자를 출력해 주고 있는데,
코드를 보면 알겠지만 글자를 2번 출력해 주고 있다. 한번은 rgnLeft에
한번은 rgnRight에 해주고 있다.

즉 2개의 사각 영역을 붙혀서 각각의 사각형에 영역을 만들고, 그 영역안에
다른 색상의 글자를 2번 출력 함으로써,
마치 하나의 글자가 자연스러운 색상변환이 이루어 지는거 같아 보이는 '것'일 뿐이다.

만약 사용자에 입력에 따라 사각 영역의 사이즈를 변경하고 싶다면(실행 화면처럼)
RgnSize 변수를 +,- 시켜 주는 것만으로 충분하다.(소스 생략)
Posted by 안식의후크
2010.04.19 22:13

API-TextOut 프로그래밍/API2010.04.19 22:13





아직도........... 3개나 더남았네 ㅋㅋ 슈디두바 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

다 끝나면 씻고 자야겠구만 ㅋㅋㅋ





Window창에 Text를 출력해 보자.


소스를 전부 올리긴 했지만, 창띄우는 기본적인것을 제외하고, Text에 대해서만 보자.
먼저 전역으로 선언되어있는 MyTextOut에 대해서는 잠시 미뤄두고,
WndProc에 지역변수로 hdc와,
ps를 각각 선언해 주었는데,
hdc = DC에 대한 핸들이라고 보면 될거 같다.

DC란, Device Context의 약자로,
문자열의 폰트, 선의 색상, 굵기, 채움 무늬와 색상, 그리디 모드 등등 출력에 필요한 정보들을 가지고 있다고 보면된다.
실제로 LBUTTONDOWN에서 보면,
GetDC를 사용해서 hWnd에서 DC를 받아오는 것을 볼 수 있고,
마찬가지로 PAINT에서도,
BeginPaint에서 dc를 가져 오는 것을 볼 수 있다.

BeginPaint를 보면 hWnd를 보내주고, &ps를 하는걸 알 수 있는데,
그때 ps에 paint에 필요한 정보가 삽입 된다고 보면 된다.

그리고 추가적으로 GetDC - ReleaseDC 는 각각 DC를 받고, DC를 지우는 역활을 한다고 볼 수 있다.
PAINT에 있는 BeginPaint - EndPaint도 같은 의미이다.
단, GetDC - EndPaint 처럼은 짝지을 수 없다는 것을 기억하자.

TextOut은 그렇게 어려운 함수는 아니다. TextOut(hdc, 100, 100, TEXT("Beautiful Korea"),15);
hdc을 보내고, 시작x, 시작y, 문자열, 문자열의 길이가 저장되는데,
문자열을 보내주기 위해선 TEXT()안에 넣어야 한다는 것을 주의하자.
변수 또한 TCHAR, TCHAR *를 사용해서 값을 넣고 있는 것을 볼 수 있다.
또한 strlen이 아닌 lstrlen을 사용해야 하고,
wsprintf를 사용해서 문자열을 변수에 넣어 주는 것을 확인 할 수 있다.

SetTextAlign는 문자열에 대한 기준(정렬)을 해주는 것인데, 시작점을 Center로 할 것인가. TA_TOP | TA_LEFT로 할것인가, 또는 다른 무엇인가로 할 것인가에 대해 설정해 줄 수 있다.
그 외 내용은 모두 소스 주석에 삽입 시켜 놓았다.
cp대해서 언급하고 있지만, 단순히 내부에서 가지고 있는 일종의 커서 정도로 생각하면 될것 같다.
출력 결과

'프로그래밍 > API' 카테고리의 다른 글

API-Key입력(1)  (0) 2010.04.21
API-MessageBox  (0) 2010.04.19
API-GraphOut  (0) 2010.04.19
API-DrawText  (0) 2010.04.19
API-TextOut  (0) 2010.04.19
API-창만들기  (0) 2010.04.19
Posted by 안식의후크