Visual C++ Programming Keyboard & Timer

Slides:



Advertisements
Similar presentations
1/29 키보드로 직접 입력할 수 없는 다양한 기호와 한자를 입력하는 방법을 알아 보자. 또한 블록으로 영역을 설정하는 여러 가지 방법에 대해 살펴본 후 블록 으로 설정된 내용을 복사하여 붙여넣거나, 잘라내고 이동하는 방법에 대해서 도 알아보자. 02_ 문서의 입력과 편집.
Advertisements

을지대학교 무선 네트워크 사용 방법 2010 년 06 월 01 일. 을지대학교 무선 네트워크 사용 방법 1. PC 무선랜 카드 활성화 및 체크 1 단계 : 시작 -> 설정 -> 네트워크 설정 2 단계 : 무선 네트워크 설정 선택 -> 마우스 버튼 오른쪽 클릭 -> 사용.
Timer Department of Digital Contents Sang Il Park.
Keyboard Input. Announcement 휴강공고 : –4 월 12 일 ( 월요일 ) 수업 없음 – 보강일정 : 차후 공고 예정.
메시지 처리의 기본 개념 메시지 발생된 이벤트의 종류와 정보를 전달하는 일종의 상수 값 윈도우 프로그래밍 가장 중요한 것은 메시지를 처리하는 것 윈도우 시스템 Application 이벤트 발생 메시지 전송 메시지 처리 화면에 출력.
Message Process for SDI Chung-Buk HRD Institute of KCCI Dept. of Information & Communication PhD. Kang, Won-Chan.
Department of Digital Contents Sang Il Park
메뉴 용어 (1/6) 최상위 메뉴 = 메뉴 바 최상위 메뉴 = 메뉴 바.
2장. 윈도우즈 입출력 1/211 1.
목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
DB 프로그래밍 학기.
DB 프로그래밍 학기.
MFC Application Frameworks (AFX)
149개의 실습예제로 배우는 Flash 8.
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
윤 홍 란 다이알로그(대화상자) 윤 홍 란
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
모 바 일 게 임 제 작 한국IT전문학교 박재성.
07. 메뉴와 대화상자 제목. 07. 메뉴와 대화상자 제목 메뉴를 작성하고 사용하는 방법을 배운다. 토스트의 다양한 출력 방법을 알아본다. 대화상자의 사용법을 익힌다.
MFC 프로그래밍에 관한 팁 / Keyboard / Timer
MFC 프로그래밍에 관한 팁 / Keyboard
마우스 메시지 처리 기법을 익힌다. 키보드 메시지 처리 기법을 익힌다..
마우스(Mouse) 다루기 컴퓨터응용 및 실습 I.
Visual C++ Programming Output and File
제4장 대화상자 4.1 CDialogEx 클래스 4.2 대화상자 기반의 프로그램 실습 4-1 MFC 기본 컨트롤 사용법 익히기
5장. 마우스와 키보드.
대화상자 편집기의 사용법을 익힌다. 모드형 대화상자와 비 모드형 대화상자의 차이점을 이해하고 작성 방법을 익힌다.
1. C++ 시작하기.
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
Visual C++ Programming Menu
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
2장 JSP 개발 환경 설정 이장에서 배울 내용 : JSP 페이지를 작성하기 위한 개발환경을 설정하고, 웹 어플리케이션 개발을 위해 반드시 이해하여야 할 웹 어플리케이션 폴더 구조에 대해 학습한다. 또한 요청된 JSP 페이지가 어떠한 처리과정을 거쳐 응답이 이루어지는가에.
13. 연산자 오버로딩.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Lab 4 보고서 교재 5장 사용자 인터페이스 예제 - 사용자 인터페이스 갱신
홀인원2.0 설치 메뉴얼.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
스위시 맥스2 이미지 갤러리 만들기 아래 그림이 스위시 맥스2로 만들 이미지 갤러리 이다.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
파워포인트 단축키 모음 범주 명령/기능 단축키 오피스 공통 단축키 파일 열기 Ctrl + O O 열려진 창들 간의 전환
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
OpenCV 설정 2.21 만든이 딩딩.
단축키 기능 1. 단축키 기능 설명 Alt + R 조회 S 저장 I 삽입 A 추가 D 삭제 P 출력 Q 닫기
DK-128 개발환경 설정 아이티즌 기술연구소
소리 편집 안 재 형.
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
StyleCop 소개 SGS Framework 개발 팀.
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
메뉴(Menu) 컴퓨터응용 및 실습 I.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
9 브라우저 객체 모델.
NeoAI-Label - 운용가이드 2019/01/07 박효근 /
숙제 작성 및 제출 과정 김진하 2008/03/14.
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
CHAP 5. 메뉴와 대화상자.
6 객체.
사용자 인터페이스.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
BoardGame 보드게임 따라가기.
Presentation transcript:

Visual C++ Programming Keyboard & Timer Department of Digital Contents Sang Il Park

Outline Review: Keyboard & timer Interface – Menus

Review: 키보드 포커스 키보드 포커스 변화 WM_SETFOCUS WM_KILLFOCUS WM_SETFOCUS

Review: 캐럿 관련 함수 함수 이름 역할 CreateCaret() 비트맵을 이용하여 캐럿을 생성한다. CreateGrayCaret() 회색 사각형 모양의 캐럿을 생성한다. CreateSolidCaret() 검정색 사각형 모양의 캐럿을 생성한다. ShowCaret() 캐럿이 보이도록 한다. HideCaret() 캐럿을 숨긴다. GetCaretPos() 캐럿의 위치(클라이언트 좌표)를 얻는다. SetCaretPos() 캐럿의 위치(클라이언트 좌표)를 변경한다. ::DestroyCaret() 캐럿을 파괴한다. ::GetCaretBlinkTime() 캐럿이 깜박이는 간격을 얻는다. ::SetCaretBlinkTime() 캐럿이 깜박이는 간격을 설정한다.

Review: 키 누름 메시지 키 누름 메시지(Keystroke Message) 키 누름 메시지 종류 키보드를 누르거나 떼는 동작에 의해 발생하는 메시지 키 누름 메시지 종류 메시지 의미 WM_KEYDOWN F10, Alt 이외의 키를 누를 때 WM_KEYUP F10, Alt를 이외의 키를 뗄 때 WM_SYSKEYDOWN F10, Alt, Alt + 키 조합을 누를 때 WM_SYSKEYUP F10, Alt, Alt + 키 조합을 뗄 때

Review: 키 누름 메시지 메시지 핸들러 형태 nChar nRepCnt nFlags 키에 할당된 가상 키 코드값  다음 페이지 표 참조 nRepCnt 키를 계속 누르고 있을 경우 1보다 큰 값을 가진다. nFlags 키와 관련된 다양한 정보를 담고 있다(MSDN 참조). afx_msg void On#### (UINT nChar, UINT nRepCnt, UINT nFlags) ;

Review: 키 누름 메시지 가상 키코드 (Virtual Key Code) 가상 키 코드 VK_CANCEL VK_BACK VK_TAB VK_RETURN VK_SHIFT VK_CONTROL VK_MENU VK_PAUSE VK_CAPITAL VK_ESCAPE VK_SPACE VK_PRIOR VK_NEXT VK_END 해당 키 Ctrl-Break Backspace Tab Enter Shift Ctrl Alt Pause Caps Lock Esc Spacebar PgUp PgDn End VK_HOME VK_LEFT VK_UP VK_RIGHT VK_DOWN VK_SNAPSHOT VK_INSERT VK_DELETE VK_0 - VK_9 VK_A - VK_Z VK_F1 - VK_F12 VK_NUMLOCK VK_SCROLL Home ← ↑ → ↓ Print Screen Insert Delete 0 – 9 A – Z F1 - F12 Num Lock Scroll Lock

Review: 문자 메시지 문자 메시지 - VK_R 키를 누른 경우 문자 메시지 - Alt + VK_R 키를 누른 경우 WM_KEYDOWN WM_CHAR WM_KEYUP WM_SYSKEYDOWN WM_CHAR WM_SYSKEYUP WM_KEYDOWN

Review: SetTimer 함수 void SetTimer (int id, int time, void * fp) ; 매 설정된 시간 마다 WM_TIMER 메시지 발생 id timer의 id (예: 0, 1, 2, … ) timer가 여러 개 있을 경우 구분하기 위해 사용 time: 알람을 울릴 주기 (=millisec) 1000 = 1 초 반드시 윈도우가 만들어 진 후 설정한다. 주로 WM_CREATE의 핸들러인 OnCreate 내부에 설정 예) SetTimer(0, 100, NULL);

Review: WM_TIMER 핸들러 nIDEvent 코딩 예) 현재 WM_TIMER를 발생시킨 타이머의 id afx_msg void OnTimer (int nIDEvent) void CChildView::OnTimer(int nIDEvent) { if(nIDEvent == 0) // 주기 마다 해 줘야 할 일 }

Program Assignment #3 간단한 키보드 입력 게임 만들기 Due date: 4월 10일 23:59 까지 프로젝트파일 압축하여 e-mail 제출

Interface - MENU

메뉴 용어 (1/6) 최상위 메뉴 = 메뉴 바 최상위 메뉴 = 메뉴 바

메뉴 용어 (2/6) 메뉴 항목 명령 항목 팝업 항목 용어 의미 ① 명령 항목 명령(Command)을 수행하는 메뉴 항목. 선택하면 WM_COMMAND 메시지가 발생한다. ② 팝업 항목 하위 메뉴를 화면에 표시하는 메뉴 항목. 선택해도 WM_COMMAND 메시지가 발생하지 않는다. 명령 항목 팝업 항목

메뉴 용어 (3/6) Drop-down 메뉴 최상위 메뉴 항목을 클릭했을 때 펼쳐지는 메뉴 Drop-down 메뉴 = Pop-up 메뉴

메뉴 용어 (4/6) 컨텍스트 메뉴 = 단축 메뉴 마우스 오른쪽 버튼을 누를 때 열리는 메뉴 마우스 커서의 위치 또는 현재 작업하고 있는 내용에 따라 서로 다른 메뉴 항목이 표시됨 컨텍스트 메뉴 = 단축 메뉴 = 팝업 메뉴

메뉴 용어 (5/6) 시스템 메뉴 = 윈도우 메뉴 시스템 메뉴 = 윈도우 메뉴

메뉴 용어 (6/6) 액세스키와 단축키 액세스키 단축키 액세스키 단축키 메뉴가 열린 상태에서 특정 항목을 키보드로 빠르게 선택 메뉴가 열리지 않은 상태에서도 키 조합으로 메뉴 항목의 기능을 곧바로 실행 액세스키 단축키

메뉴 클래스 MFC 클래스 CMenu CCmdUI 메뉴를 다룰 수 있는 다양한 함수 제공 CObject의 파생 클래스가 아닌 독립된 클래스 메뉴와 툴바 및 상태바에 필요한 기능 지원

메뉴 생성 (1/6) 두 가지 방법 메뉴 리소스 프로그램 실행 중 메뉴 생성 메뉴 리소스 작성

메뉴 생성 (2/6) AppWizard가 생성한 코드 BOOL CSimple2App::InitInstance() { CMainFrame* pFrame = new CMainFrame; m_pMainWnd = pFrame; pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL); pFrame->ShowWindow(SW_SHOW); pFrame->UpdateWindow(); return TRUE; }

메뉴 생성 실습 (3/6) 리소스 뷰 사용

메뉴 생성 (4/6) 메뉴 항목 속성 의미 내부적으로 메뉴 항목을 구분하는 번호이며 일반적으로 ID_메뉴이름_항목이름 형태로 만든다. 예) ID_EDIT_CUT 화면에 표시되는 문자열로 액세스키를 지정하려면 해당 문자 앞에 '&' 기호를 사용한다. 단축키를 사용할 경우 '\t' 기호를 삽입하여 단축키를 나타내는 문자열이 탭 위치에 정렬되도록 한다. 예) 잘라내기(&T)\tCtrl+X 메뉴 항목을 구분하는 가로줄이 표시된다. 설정하면 명령 항목이 아닌 팝업 항목이 된다. 최상위 메뉴는 대개 Pop-up 속성을 가진다. 속성 ID Caption Separator Pop-up

메뉴 생성 (5/6) 메뉴 항목 속성 (cont'd) 메뉴 항목이 표시되지만 사용하지는 못한다. 일반적으로 메뉴 항목은 하나의 열(Column)에 표시되지만 항목의 개수가 많을 경우 두 개 이상의 열에 표시되게 할 수 있다. Break 속성으로 Column 또는 Bar를 선택하면 이때부터는 다음 열에 메뉴 항목이 표시된다. Column과 Bar 속성은 기본적으로 같은 기능을 하지만 Bar 속성을 선택하면 열 구분선(세로줄)이 생긴다. 메뉴 항목의 왼쪽에 체크 표시를 한다. Inactive Break Checked 의미 속성

메뉴 생성 (6/6) 메뉴 항목 속성 (cont'd) 메뉴 항목이 흐리게 표시되어 현재 사용할 수 없음을 나타낸다. 윈도우의 오른쪽 끝 위치에 메뉴가 표시되도록 한다. 주로 Help 메뉴 항목에 이 속성을 설정한다. MFC로 작성한 프로그램에서만 사용할 수 있는 속성으로, 툴바와 상태바에 표시될 문자열을 나타낸다. '\n'을 기준으로 앞쪽 문자열은 상태바에 표시되며 뒤쪽 문자열은 툴팁에 표시된다. 예) 선택 부분을 잘라내어 클립보드에 넣습니다\n잘라내기 Grayed Help Prompt 의미 속성

메뉴 명령 처리 (1/4) 메뉴 명령 처리 과정 ① 명령 항목을 마우스나 키보드로 선택 ② WM_COMMAND 메시지 발생

메뉴 명령 처리 (2/4) MFC의 메뉴 명령 처리 방법 명령 라우팅 각각의 메뉴 항목에 대해 함수를 따로 작성 명령 핸들러(Command Handler) ON_COMMAND(메뉴ID, 함수명) 매크로를 이용하여 메뉴 항목과 함수 연결 명령 라우팅 명령 핸들러를 작성하는 위치에 관계없이 처리

메뉴 명령 처리 (3/4) 속성 창을 이용

메뉴 명령 처리 (4/4) 메뉴 명령 처리 예 BEGIN_MESSAGE_MAP(CChildView,CWnd ) ... ON_COMMAND(ID_COLOR_RED, OnColorRed) ON_COMMAND(ID_COLOR_GREEN, OnColorGreen) ON_COMMAND(ID_COLOR_BLUE, OnColorBlue) END_MESSAGE_MAP() void CChildView::OnColorRed() { m_color = RGB(255, 0, 0); Invalidate(); }

코딩 실습 사각형을 그리고 메뉴를 통해 색 변경 1. Color를 저장할 변수 선언 COLORREF m_color 2. OnPaint에서 brush 설정 CBrush brush(m_color); dc.SelectObject(&brush); 3. 사각형 그리기 4. 메뉴 만들기 5. 메뉴에 핸들러 함수 연결 6. m_color 값 변경

메뉴 항목 갱신 (1/5) 메뉴 항목 갱신 예

메뉴 항목 갱신 (2/5) MFC의 메뉴 항목 갱신 방법 명령 라우팅 각각의 메뉴 항목에 대해 함수를 따로 작성 명령 갱신 핸들러(Command Update Handler) ON_UPDATE_COMMAND_UI(메뉴ID, 함수명) 매크로를 이용하여 메뉴 항목과 함수 연결 명령 라우팅 명령 핸들러와 마찬가지로 명령 갱신 핸들러도 작성하는 위치에 관계없이 처리

메뉴 항목 갱신 (3/5) 속성 창을 이용

메뉴 항목 갱신 (4/5) 메뉴 항목 갱신 예 BEGIN_MESSAGE_MAP(CChildView,CWnd ) ... ON_UPDATE_COMMAND_UI(ID_COLOR_RED, OnUpdateColorRed) ON_UPDATE_COMMAND_UI(ID_COLOR_GREEN, OnUpdateColorGreen) ON_UPDATE_COMMAND_UI(ID_COLOR_BLUE, OnUpdateColorBlue) END_MESSAGE_MAP() void CChildView::OnUpdateColorRed(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_color == RGB(255, 0, 0)); }

메뉴 항목 갱신 (5/5) CCmdUI 클래스 멤버 함수 멤버 함수 의미 사용 예 Enable( ) 활성화 상태 변경 pCmdUI->Enable(b_DrawMode); SetCheck( ) 체크 상태 변경 pCmdUI->SetCheck(m_color == RGB(255, 0, 0)); SetRadio( ) 라디오 표시 상태 변경 pCmdUI->SetRadio(m_color == RGB(255, 0, 0)); SetText( ) 문자열 변경 pCmdUI->SetText("Light On");

코딩 실습 Update Command UI 실습 1. UpdateCommand 핸들러 연결 2. pCmdUI->SetCheck(…) 구현 if(m_color==RGB(0,0,255)) pCmdUI->SetCheck(true); else pCmdUI->SetCheck(false);

툴바 (1/4) 툴바 MFC 클래스 선택하면 WM_COMMAND 메시지 발생!

툴바 (2/4) 툴바 리소스

툴바 (3/4) 툴바 코드 class CMainFrame : public CFrameWnd { // 생략 ... protected: CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CChildView m_wndView; }; int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |

툴바 (4/4) 툴바 코드 (cont'd) WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; } // 생략 ... m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0;

코딩연습 color menu의 내용을 toolbar와 연결시킨다 ToolBar에 버튼 추가 각 버튼에 ID를 menu의 ID와 똑같이 설정 예) ID_COLOR_RED

코딩연습 Menu에 없는 작업을 toolbar에서 하고 싶다면… 직접 메시지를 만들고 연결 ToolBar에 버튼 추가 MessageMap 추가 ON_COMMAND(…) 함수 정의/선언 추가 afx_msg void OnSelectCircle();

상태바 (1/4) 상태바 MFC 클래스

상태바 (2/4) 상태바 리소스 static UINT indicators[ ] = { ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };

상태바 (3/4) 상태바 코드 class CMainFrame : public CFrameWnd { // 생략 ... protected: CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CChildView m_wndView; };

상태바 (4/4) 상태바 코드 (cont'd) int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { // 생략 ... if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) TRACE0("Failed to create status bar\n"); return -1; }