TextOut(), DrawText()
1. 로또번호 출력
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   hInst = hInstance; // 인스턴스 핸들을 전역 변수에 저장합니다.
   HWND hWnd = CreateWindowW(szWindowClass, _T("최소화, 최대화가 없는 창입니다."), WS_OVERLAPPED | WS_SYSMENU | WS_THICKFRAME,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
   if (!hWnd)
   {
      return FALSE;
   }
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
   return TRUE;
}
#include<time.h>
int data[6];
void mypaint() {
	srand(time(NULL));
	for (int i = 0; i < sizeof(data) / 4; i += 1) {
		int imsi = rand() % 6 + 1;
		data[i] = imsi;
		for (int j = 0; j < i; j++) {
			if (data[j] == imsi) {
				i--;
				break;
			}
		}
	}
}
void my_textout(HDC hdc) {
	TCHAR tmp[80];
	for (int i = 0; i < sizeof(data) / 4; i++) {
		_stprintf_s(tmp, _T("%d"), data[i]);
		TextOut(hdc, 150 + i * 20, 100, tmp, _tcslen(tmp));
	}
}
void myrect(HDC hdc, RECT *rect) {
	rect->left = 30;
	rect->top = 100;
	rect->right = 200;
	rect->bottom = 120;
}
void my_drawtext(HDC hdc, RECT *rect) {
	TCHAR tmp[40];
	_stprintf_s(tmp, _T("LOTTO Number : "));
	DrawText(hdc, tmp, _tcslen(tmp), rect, DT_SINGLELINE | DT_LEFT);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // 메뉴 선택을 구문 분석합니다.
            switch (wmId)
            {
            case IDM_ABOUT:
                DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
                break;
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, message, wParam, lParam);
            }
        }
        break;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
			RECT rect;
            // TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다.
			mypaint();
			myrect(hdc, &rect);
			my_textout(hdc);
			my_drawtext(hdc, &rect);
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
[실행화면]
사용한 함수 및 구조체에 대한 설명
1. _stprintf_s(입력할 메모리공간, 입력할 데이터);
- 입력할 데이터를 메모리공간에 넣는다.
- String printf Secure 의 약자이다.
2. TextOut(그릴 영역, x좌표, y좌표, 그릴데이터, 그릴데이터의 길이);
- 영역 내의 (x,y) 좌표에 데이터를 원하는 사이즈만큼 그린다.
3. _tcslen(데이터);
- 데이터를 넣으면 데이터의 길이를 반환해주는 함수이다.
- TCHAR String Length의 약자이다.
4. RECT *rect
- RECT 구조체타입의 인스턴스의 주소를 가져온다.
- RECT 구조체는 top, bottom, left, right로 구성되어 있다.
5. DrawText(그릴 영역, 그릴데이터, 그릴데이터의 길이, 영역 내의 사각형좌표, 그릴 방식);
- 영역 내에 가상의 사각형을 만들고 그 안에 데이터를 원하는 사이즈만큼
방식(왼쪽정렬, 중앙정렬, 줄바꿈금지)에 따라 그린다.
- TextOut()함수와 비슷하지만 영역의 좌표를 전달하는 매개변수가 있고, 영역 내 출력 방식(플래그) 가 추가로 있다.
6. PAINTSTRUCT ps;
- 출력영역(Device Context)에 대한 상세정보가 저장되어 있다.
7. HDC hdc = BeginPaint(hWnd, &ps);
- 특정 창에 출력영역에 대한 정보로 출력영역(Device Context)의 핸들을 반환받아 hdc에 저장한다.
8. EndPaint(hWnd, &ps);
- BeginPaint(hWnd, &ps); 함수로 Device Context를 얻어와 출력을 마친 후
EndPaint(hWnd, &ps); 함수를 호출하여 출력의 끝을 지정(인자는 BeginPaint()와 같아야 한다.)
'Programming Language > Windows API' 카테고리의 다른 글
| keyboard[1] (0) | 2018.08.27 | 
|---|---|
| 키보드 메세지 처리 (0) | 2018.08.26 | 
| 기본구조 상세설명 (0) | 2018.08.25 | 
| 출력 (0) | 2018.08.25 | 
| 용어 (0) | 2018.07.14 | 
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
			
		
		
		
		
		
		
		
	
댓글