keyboard[3]
1. 키보드 입력 시 문자열 입력 후 출력
1) my.h 소스
void my_input(HDC hdc, WPARAM wParam, LPTSTR lpString, int *cnt);
2) my.cpp 소스
#include "stdafx.h" #include "keyboard[3].h" #include "my.h" void my_input(HDC hdc, WPARAM wParam, LPTSTR lpString, int *cnt) { lpString[(*cnt)++] = wParam; lpString[*cnt] = NULL; TextOut(hdc, 0, 0, lpString, _tcslen(lpString)); }
+) 소스설명
[1] LPTSTR lpString
- Long Pointer 타입의 TCHAR String을 말한다.
- TCHAR * 형과 동일하다.
[2] int *cnt
- 메세지처리함수 WinProc( )의 count의 주소를 가져온다.
- 주소의 값으로 데이터 처리하여 call by reference
[3] lpString[(*cnt)++] = wParam
- 메세지처리함수 WinProc( )의 str의 count인덱스에 입력받은 값 저장 후 count값 증가.
[4] lpString[*cnt] = NULL
- 문자열 마지막에 NULL
3) keyboard[3].cpp 소스
#include "stdafx.h" #include "keyboard[3].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; //static변수는 정적변수로 처음 1번만 초기화되고 이후 값이 그대로 유지된다. 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_CREATE: { count = 0; } break; case WM_CHAR: { hdc = GetDC(hWnd); my_input(hdc, wParam, str, &count); ReleaseDC(hWnd, hdc); } break; case WM_PAINT: { hdc = BeginPaint(hWnd, &ps); // TODO: 여기에 hdc를 사용하는 그리기 코드를 추가합니다. TextOut(hdc, 0, 0, str, _tcslen(str)); // 적지 않으면 최소화나 창 이동시 사라짐. EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
4) (효율적인 코딩을 위해) 헤더파일 및 소스파일 추가
[1] my.cpp 생성
[2] my.h 생성
[3] keyboard[3].cpp의 위에 #include "my.h"
[4] my.cpp 에 keyboard[3].cpp에 있는 #include 파일 전부 복사
[5] my.h 에 my.cpp에서 정의한 함수의 원형 작성
5) 문제점
[1] 입력받은 문자열이 순서대로 출력되지만 창이동 및 최소화 시 영역이 초기화된다.
[2] 보완하기위해 WM_PAINT의 내용에 TextOut( )함수를 사용하였지만 그러면 2번씩 출력이 된다.
[3] 입력한 문자열이 backspace시 삭제되지 않고, Enter시 개행되지도 않는다.
'Programming Language > Windows API' 카테고리의 다른 글
keyboard[5] (0) | 2018.08.27 |
---|---|
keyboard[4] (0) | 2018.08.27 |
keyboard[2] (0) | 2018.08.27 |
keyboard[1] (0) | 2018.08.27 |
키보드 메세지 처리 (0) | 2018.08.26 |
댓글