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