Programming Language/Windows API
keyboard[5]
1. 키보드 입력 시 문자열 입력 후 출력
1) my.h 소스
void my_input(HWND hWnd, WPARAM wParam, LPTSTR lpString, int *cnt); void my_paint(HDC hdc, TCHAR *lpString, int *cnt);
2) my.cpp 소스
#include "stdafx.h" #include "keyboard[5].h" #include "my.h" void my_input(HWND hWnd, WPARAM wParam, LPTSTR lpString, int *cnt) { if (wParam == VK_BACK && *cnt >= 0) { //삭제가능한 문자가 존재할 때 backspace가 입력됬다면 --(*cnt); } else { lpString[(*cnt)++] = wParam; } lpString[*cnt] = NULL; InvalidateRgn(hWnd, NULL, TRUE); } void my_paint(HDC hdc, TCHAR *lpString, int *cnt) { TCHAR value[20]; TextOut(hdc, 0, 0, lpString, _tcslen(lpString)); _stprintf_s(value, _T("length : %d"), *cnt); TextOut(hdc, 0, 20, value, _tcslen(value)); }
+) 소스설명
[1] if(wParam == VK_BACK && *cnt > 0)
- 입력된 키가 backspace이고 1자 이상 입력됬다면, cnt 감소 후 그 곳에 NULL
3) keyboard[5].cpp 소스
#include "stdafx.h" #include "keyboard[5].h" #include "my.h" LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; static TCHAR str[100]; static int count; switch (message) { case WM_CREATE: { count = 0; } break; case WM_CHAR: { hdc = GetDC(hWnd); my_input(hWnd, wParam, str, &count); ReleaseDC(hWnd, hdc); } 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_PAINT: { hdc = BeginPaint(hWnd, &ps); my_paint(hdc, str, &count); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
4) 문제점
[1] backspace시 삭제되는건 개선했지만 Enter시 개행되지 않는다.
[실행화면]
'Programming Language > Windows API' 카테고리의 다른 글
caret (0) | 2018.08.27 |
---|---|
keyboard[6] (0) | 2018.08.27 |
keyboard[4] (0) | 2018.08.27 |
keyboard[3] (0) | 2018.08.27 |
keyboard[2] (0) | 2018.08.27 |
댓글