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 |
댓글