Programming Language/Windows API
keyboard[마지막]
1. 연습장만들기
- 입력하는 글자를 출력
- Enter 시 줄바꿈
- BackSpace 시 지우기
- 라인 수 보이기
- 가로 길이, 세로 길이, 총 문자수 보이기
2. 소스
1) source.h
void my_input(HWND hWnd, HDC hdc, WPARAM wParam, TCHAR (*lpString)[100], int *nLength, int *size, int *y); void my_paint(HDC hdc, int *nLength, int *size, int *y, TCHAR(*lpString)[100]);
2) source.cpp
#include "stdafx.h" #include "practice2_3.h" #include "source.h" void my_input(HWND hWnd, HDC hdc, WPARAM wParam, TCHAR(*lpString)[100], int *nLength, int *size, int *y) { if (nLength[0] == -1) { nLength[0]++; (*size)++; } if (wParam == VK_RETURN && *y < 80) { *y += 1; nLength[*y]--; } if (wParam == VK_BACK && 0 <= nLength[*y]) { if (nLength[*y] == 0 && 0 < *y) { (*y)--; //위로한칸 } else if(lpString[*y][1] != VK_BACK) { nLength[*y]--; //한칸빼기 } (*size)--; } else { lpString[*y][(nLength[*y])++] = wParam; (*size)++; } lpString[*y][nLength[*y]] = NULL; InvalidateRgn(hWnd, NULL, TRUE); } void my_paint(HDC hdc, int *nLength, int *size, int *y, TCHAR(*lpString)[100]) { TCHAR tmp[40]; TCHAR set_nu[10]; _stprintf_s(tmp, _T("가로 : %d자, 세로 : %d줄, 전체 : %d자"), nLength[*y], *y + 1, *size); TextOut(hdc, 0, 0, tmp, _tcslen(tmp)); for (int i = 0; i <= (*y); i++) { _stprintf_s(set_nu, _T("%2d) "), i + 1); TextOut(hdc, 0, i * 20 + 20, set_nu, _tcslen(set_nu)); TextOut(hdc, 20, i * 20 + 20, lpString[i], nLength[i]); } }
3) practice2_3.cpp
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { PAINTSTRUCT ps; HDC hdc; static TCHAR str[100][100]; static int count[10]; static int ypos; static int size; case WM_CREATE: { int i = 0; while (i < 100) { count[i++] = 0; } size = 0; ypos = 0; } break; 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_CHAR: { hdc = GetDC(hWnd); my_input(hWnd, hdc, wParam, str, count, &size, &ypos); ReleaseDC(hWnd, hdc); } break; case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); // TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다. my_paint(hdc, count, &size, &ypos, str); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
3. 실행화면
'Programming Language > Windows API' 카테고리의 다른 글
도형 자동이동 (0) | 2018.09.30 |
---|---|
마우스로 도형 옮기기 (0) | 2018.09.30 |
shape (0) | 2018.08.27 |
caret (0) | 2018.08.27 |
keyboard[6] (0) | 2018.08.27 |
댓글