API-출력 관련 함수들

1. 문자열출력

문자열을 출력하는 TextOut 함수이며 도스의 printf에 해당하는 함수이다. 원형은 다음과 같다. 


BOOL TextOut(hdc, nXStart, nYStart, lpszString, cbString) 
 

첫번째 인수는 당연히 DC의 핸들인 hdc이다. 이 함수뿐만 아니라 화면에 무엇인가를 출력하는 모든 함수들의 첫번째 인수는 항상 hdc이다. 이 DC는 GetDC나 BeginPaint 함수에 의해 구해졌을 것이다. (nXStart, nYStart)는 문자열이 출력될 좌표이며 lpszString이 출력할 문자열을 담고 있는 문자열 포인터이며 cbString이 출력할 문자열의 길이이다. TextOut 함수는 널종료 문자열을 사용하지 않으므로 문자열의 길이를 인수로 반드시 밝혀주어야 한다. 예제에서는 다음 호출문을 사용하여 문자열을 출력하였다.




2. 문자열정렬

UINT
SetTextAlign(HDC hdc,UINT fMode); 


보다시피 이 함수도 첫번째 인수로 DC의 핸들 즉, hdc을 받아 들이고 있다. 두번째 인수 fMode가 지정하는 정렬 정보에 따라 hdc의 정렬 상태를 변경하게 되며 이후부터 hdc를 참조하여 출력되는 모든 문자열은 이 함수가 지정한 정렬 상태를 따르게 된다. fMode의 값은 다음과 같으며 두 개 이상의 플레그를 OR로 연결하여 사용한다
 


TA_TOP 지정한 좌표가 상단좌표가 된다.
TA_BOTTOM 지정한 좌표가 하단 좌표가 된다.
TA_CENTER 지정한 좌표가 수평 중앙 좌표가 된다.
TA_LEFT 지정한 좌표가 수평 왼쪽 좌표가 된다.
TA_RIGHT 지정한 좌표가 수평 오른쪽 좌표가 된다.
TA_UPDATECP 지정한 좌표대신 CP(Current Point)를 사용하며 문자열 출력후에 CP를 변경한다.
TA_NOUPDATACP CP를 사용하지 않고 지정한 좌표를 사용하며 CP를 변경하지 않는다.




3. 기능이 더 많은 문자열 출력

정렬기능과 영역기능을 같이 가지고있는 문자열출력함수이다.

int DrawText( HDC hDC, LPCTSTR lpString, int nCount, LPRECT lpRect, UINT uFormat ); 
  
 
RECT구조체를 사용하며 다음과 같이 정의되어 있다.
typedef struct _RECT {    // rc  
    LONG left; 
    LONG top; 
    LONG right; 
    LONG bottom; 
} RECT; 

DT_LEFT 수평 왼쪽 정렬한다. DT_RIGHT 수평 오른쪽 정렬한다. DT_CENTER 수평 중앙 정렬한다. DT_BOTTOM 사각 영역의 바닥에 문자열을 출력한다. DT_VCENTER 사각 영역의 수직 중앙에 문자열을 출력한다. DT_WORDBREAK 사각영역의 오른쪽 끝에서 자동 개행되도록 한다. DT_SINGLELINE 한줄로 출력한다. DT_NOCLIP 사각 영역의 경계를 벗어나도 문자열을 자르지 않고 그대로 출력한다.


4. 그래픽 출력(점,선,도형 등등)
COLORREF SetPixel(hdc, nXPos, nYPos, clrref)    //점
DWORD MoveToEx(hdc, x, y, lpPoint)   //선
BOOL LineTo(hdc, xEnd, yEnd) 
BOOL Rectangle(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect)    //네모
BOOL Ellipse(hdc, nLeftRect, nTopRect, nRightRect, nBottomRect)    //원

 보다시피 모든 GDI 함수의 첫번째 인수는 DC 핸들인 hdc이므로 TextOut 함수와 마찬가지로 DC핸들부터 얻어야 그래픽을 출력할 수 있다.

 선을 그을 때는 MoveToEx 함수와 LineTo 함수를 같이 사용해야 한다. GDI는 텍스트 모드의 커서에 해당하는 CP(Current Point)를 항상 유지하는데 LineTo 함수는 CP에서부터 지정한 좌표까지 선을 그으며 CP를 끝점으로 이동시켜준다. 그래서 LineTo를 연속적으로 호출하면 계속 이어지는 선을 그을 수 있다. MoveToEx는 CP를 지정한 좌표 (x,y)로 이동시켜 주며 이동전의 CP 좌표를 lpPoint에 대입해 주는데 이전 CP값이 필요치 않은 경우 lpPoint에 NULL을 넘겨주면 된다. 

               (A,B) - (C,D)까지 선을 긋고 싶다면 다음과 같이 두 함수를 연속적으로 호출해 준다.
MoveToEx(hdc, A, B, NULL); 
LineTo(hdc, C, D); 
 



5.메시지박스

메시지 박스는 조그만 별도의 윈도우를 열어서 사용자에게 정보를 전달해 주거나 질문을 하는 장치이며 MessageBox 함수 호출 한번으로 비교적 간단하게 만들 수 있다. MessageBox 함수를 보자.
 

int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType); 

첫번째 인수 hWnd는 메시지 박스의 오너(Owner) 윈도우이다. 오너 윈도우란 메시지 상자를 소유한 윈도우를 말하며 메시지 박스는 오너 윈도우의 중앙에 나타나며 메시지 박스가 떠 있는 동안 오너 윈도우는 사용할 수 없는 상태가 된다. 메시지 박스를 닫아야만 오너 윈도우를 사용할 수 있다. 두번째 인수 lpText는 메시지 박스에 출력할 문자열이며 세번째 인수 lpCaption은 메시지 상자의 타이틀 바에 나타날 제목 문자열이다. 네번째 인수 uType은 메시지 상자에 어떤 종류의 버튼이 나타날 것인가를 지정하는 여러가지 플레그들이며 다음과 같은 값들이 가능하다. 


설명
MB_ABORTRETRYIGNORE Abort, Retry, Ignore 세 개의 버튼이 나타난다.
MB_OK OK버튼 하나만 나타난다.
MB_OKCANCEL OK, Cancel 두 개의 버튼이 나타난다.
MB_RETRYCANCEL Retry, Cancel 두 개의 버튼이 나타난다.
MB_YESNO Yes, No 두 개의 버튼이 나타난다.
MB_YESNOCANCEL Yes, No, Cancel 세 개의 버튼이 나타난다.


버튼의 종류를 지정하는 이런 값 외에 아이콘을 출력하도록 하는 다음과 같은 플레그도 사용할 수 있다. 버튼 종류 플레그와 아이콘 플레그를 OR 연산자로 연결하여 uType 인수에 지정해 준다.

아이콘
MB_ICONEXCLAMATION
MB_ICONWARNING
MB_ICONINFORMATION
MB_ICONASTERISK
MB_ICONQUESTION
MB_ICONSTOP
MB_ICONERROR
MB_ICONHAND  



전달사항을 단순히 전달하는 용도 외에 사용자에게 질문을 하고 대답을 입력받는 용도로도 사용할 수 있다. 이 때는 메시지 상자를 호출한 후 사용자가 어떤 버튼을 눌렀는지를 살펴보면 되는데 MessageBox 함수는 리턴값으로 사용자가 누른 버튼값을 돌려준다.

설명
IDABORT Abort버튼을 눌렀다.
IDCANCEL Cancel 버튼을 눌렀다.
IDIGNORE Ignore 버튼을 눌렀다.
IDNO No버튼을 눌렀다.
IDOK OK 버튼을 눌렀다.
IDRETRY Retry 버튼을 눌렀다.
IDYES Yes 버튼을 눌렀다.
만약 사용자에게 게임을 계속할 것인가를 묻고 싶다면 다음과 같이 코드를 작성하면 된다.


if (MessageBox(hWnd, "게임을 계속 하겠습니까","질문",MB_YESNO)==IDYES)
{
// 게임 계속 처리
}
else {
// 게임 중지
}
 
MessageBox 함수를 호출하여 질문을 먼저 하되 메시지 박스에는 Yes, No 두 개의 버튼만을 배치한다. 그리고 그 리턴값을 살펴보고 IDYES가 리턴되었으면, 즉 사용자가 Yes 버튼을 눌렀으면 게임을 계속하도록 하고 그렇지 않으면 게임을 중지하도록 하는 것이다. 메시지 박스는 사용 방법이 쉽고 결과를 금방 확인할 수 있기 때문에 초보자의 실습용으로 많이 사용되며 디버깅용으로도 활용되고 있다.




6. 메시지 비프 

문자열이나 그래픽, 메시지 상자처럼 눈에 보이는 출력도 있지만 비프음을 내는 들리는 종류의 출력도 있다. 스피커를 통해 간단한 비프음을 출력하고자 할 때는 MessageBeep 함수를 사용한다.
 

BOOL MessageBeep(UINT uType);  

 값 설명
0XFFFFFFFF PC의 스피커를 통해 음을 낸다.
MB_ICONASTERISK Asterisk 비프음
MB_ICONEXCLAMATION Exclamation 비프음
MB_ICONHAND Hand 비프음
MB_ICONQUESTION Question 비프음
MB_OK 시스템 디폴트 비프음




 

이 글을 공유하기

댓글

Designed by JB FACTORY