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

[2014.09.11 업무일지] 고한솔

by 알 수 없는 사용자 2014. 9. 11.
728x90
반응형

문자열 출력


TextOut - 글자를 그리는 함수

* 5가지의 인자가 있다.

   -> TextOut(HDC hdc, int nXStart, int nYStart, LPCTSTR IpString, int cdString);

      * hdc - 화면에 무엇을 출력하는 '모든' 함수의 첫번째 인자는 hdc이다.

* nXStart, nYStart - 출력될 문자열의 좌표 값

* IpString - 문자열 포인터

* cdString - 문자열의 길이

        -> Null문자를 인식하지 않기 때문에 정확한 문자열의 길이를 입력해야 한다.

  -> 변수를 선언하거나 함수를 선언하여 사용하면 간편하고 안전하다.




LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

HDC hdc;


switch (iMessage) {

case WM_DESTROY:

PostQuitMessage(0);

return 0;

case WM_LBUTTONDOWN:

                hdc = GetDC(hWnd);

                TextOut(hdc, 100, 100, TEXT("Beautiful Korea"), 15);

                ReleaseDC(hWnd, hdc);

return 0;

}

return(DefWindowProc(hWnd,iMessage,wParam,lParam));

} 


--------------------

WM_LBUTTONDOWN에서는 GetDC를 사용하고난 후 ReleaseDC로 DC를 지워주어야한다.







WM_PAINT - 지워진 그래픽을 복구하는 메시지 
* 작업영역의 그래픽이 지워졌다는 것을 알고 복구함
* WM_PAINT 메시지에서는 " GetDC / ReleaseDC " 짝이 아닌 BeginPaint  / EndPaint " 짝을 사용한다.
  -> HDC BeginPaint(HWND hwnd, LPPAINTSTRUCT IpPaint);
  -> BOOL EndPaint(HWND hWnd, CONST PAINTSTRUCT * IpPaint);

SetTextAlign - 문자열의 정렬방법을 변경

 -> UINT SetTextAlign(HDC hdc, UINT fMode);


 값

 설명

TA_TOP

지정한 좌표가 상단 좌표가 된다. 

TA_BOTTOM 

지정한 좌표가 하단 좌표가 된다. 

TA_CENTER 

지정한 좌표가 수평 중앙 좌표가 된다. 

TA_LEFT 

지정한 좌표가 수평 왼쪽 좌표가 된다. 

TA_RIGHT 

지정한 좌표가 수평 오른쪽 좌표가 된다. 

TA_UPDATECP 

지정한 좌표를 무시하고 문자열 출력후의 CP값을 따른다. 

TA_NOUPDATECP 

CP를 사용하지않고 지정한 좌표를 사용, CP를 변경하지 않는다. 





LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

HDC hdc;

PAINTSTRUCT ps;


switch (iMessage) {

case WM_DESTROY:

PostQuitMessage(0);

return 0;

case WM_LBUTTONDOWN:

                hdc = GetDC(hWnd);

                TextOut(hdc, 100, 100, TEXT("Beautiful Korea"), 15);

                ReleaseDC(hWnd, hdc);

return 0;

// 지워진 그래픽을 복구함

case WM_PAINT:

hdc = BeginPaint(hWnd, &ps);

SetTextAlign(hdc, TA_CENTER); 

TextOut(hdc, 200, 60, TEXT("Beautiful Korea"), 15);

TextOut(hdc, 200, 80, TEXT("is My"), 5);

TextOut(hdc, 200, 100, TEXT("Lovely Home Country"), 19);

EndPaint(hWnd, &ps);

return 0;

/*-         -짝-      짝을 맞추어 사용한다.     -짝-         -*/

/*- GetDC / ReleaseDC -- -- BeginPaint / EndPaint -*/

}

return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}



결과





 



DOS창에서 메시지박스 띄우기




728x90