Programming Language/Windows API
keyboard[4]
1. 키보드 입력 시 문자열 입력 후 출력
1) my.h 소스
void my_initial(HDC hdc); void my_input(HWND hWnd, WPARAM wParam, LPTSTR lpString, int *cnt); void my_print(HDC hdc, LPTSTR lpString);
2) my.cpp 소스
#include "stdafx.h" #include "keyboard[4].h" #include "my.h" //void my_initial(HDC hdc) { // TCHAR tmp[80]; // // _stprintf_s(tmp, _T("키보드로 입력하세요!!")); // TextOut(hdc, 0, 0, tmp, _tcslen(tmp)); //} void my_input(HWND hWnd, WPARAM wParam, LPTSTR lpString, int *cnt) { lpString[*cnt] = wParam; (*cnt)++; lpString[*cnt] = NULL; InvalidateRgn(hWnd, NULL, TRUE); } void my_print(HDC hdc, LPTSTR lpString) { TextOut(hdc, 0, 0, lpString, _tcslen(lpString)); }
+) 소스설명
[1] InvalidateRgn(hWnd, NULL, TRUE)
- 화면영역수정함수
- 형식 : InvalidataRgn(hWnd, 영역(NULL시 전체영역), TRUE시 전체무효화 || FALSE시 무효화하지 않음)
- 사용하는 이유 ? 특정영역을 무효화 후 WM_PAINT 발생
3) keyboard[4].cpp 소스
#include "stdafx.h" #include "keyboard[4].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; //my_initial(hdc); } 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_print(hdc, str); EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
4) 문제점
[1] 창이동 및 최소화시 사라지는 문제를 해결하기 위해 WM_PAINT에도 출력을 넣었으나 이중출력으로
WM_CHAR에서 출력을 빼고 InvalidateRgn( )로 무효화 후 강제로 WM_PAINT가 발생하여 출력하도록 한다.
[2] 그러나 아직도 입력한 문자열이 backspace시 삭제되지 않고, Enter시 개행되지도 않는다.
'Programming Language > Windows API' 카테고리의 다른 글
keyboard[6] (0) | 2018.08.27 |
---|---|
keyboard[5] (0) | 2018.08.27 |
keyboard[3] (0) | 2018.08.27 |
keyboard[2] (0) | 2018.08.27 |
keyboard[1] (0) | 2018.08.27 |
댓글