2008/03/21 20:15
http://blog.naver.com/silzon/30029175691
안녕하세요~ 오늘 저녁에 시간의 여유가 있어서, 강좌를 여러개 올리네요. ^^
다음 주 부턴, 죽음 입니다. ㅠㅠ; 새로운 프로젝트가 시작 되었거든요 ㅠㅠ;
***********************************************************************************
MFC 다이알로그 기반에서 Accelerator 를 사용하는 방법에 대해 알아 봅시다!
(다이얼로그, Dialog, 대화상자, 엑셀러레이터, 단축키)
이번에, 단축키를 이용하여서, 메세지 박스가 띄어 지는 Dialog 기반 프로젝트를 만들어 보겠습니다.
강의 내용은, 초보자를 대상으로 만들어 졌습니다.
왠만큼, MFC 를 다뤄보신 분들은, 강의 내용을 빠르게 쑤욱~ 넘겨 보시면 됩니다.
::::: 1 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
MFC 의 SDI 나 MDI 의 경우 가속키(Accelerator) 기능이 기본적으로 들어가 있지만, Dialog Based 프로젝트에는
가속키 기능이 들어가 있지 않습니다.
Dialog Based 프로젝트에 가속키를 넣는 순서는, 대략 다음과 같습니다.
1) 리소스로부터 가속키를 읽어, 가속키 테이블을 프로그램에서 설정
2) 기본 메세지가 처리 되기 전에 미리 PreTranslateMessage() 에서 메세지 처리
::::: 2 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Dialog Based 프로젝트를 만듭니다.
Resource Tab 을 보면, Accelerator 폴더가 없습니다. (SDI, MDI 에는 Accelerator 폴더가 있음)
::::: 3 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

1) Accelerator resources 마우스 오른쪽 버튼 클릭
2) Insert.... 따닥!
그럼 아래와 같은 그림이 뜹니다.

1) Resource type 의 Accelerator 마우스 왼쪽 따닥!
2) New 버튼 따닥!
::::: 4 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

그럼, 다음과 같이, Accelerator 편집기가 뜹니다.

빨간색 부분을 마우스 왼쪽 따다닥! 누르면
윗 그림과 같이, Accel Properties 상자가 뜹니다!
우리는, 단축키 Ctrl + D 를 누르면, 대화 박스가 뜨게 만들어 봅시다!
::::: 5 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

1) ID 에다가 사용자 임의데로 써줍니다.
2) 단축키 설정을 위해 Next Key Typed 버튼을 따닥!
그럼 아래와 같은 그림이 뜹니다.

3) 우리는 아까, 단축키를 Ctrl + D 로 하기로 했으므로, Ctrl + D 를 누릅니다!
::::: 6 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

그럼, 윗 그림과 같이
Key 에 D 가 들어가 있고, 오른쪽 상단 Ctrl 키가 체크 되어 있습니다.
그럼, 프로그램 입장에선, 사용자가 Ctrl + D 를 누르면, IDC_HELLO 라는 메세지가 날라 옵니다.
우리는 이 IDC_HELLO 라는 ID 를 받아, 처리 할 수 있습니다.
::::: 7 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

1) Ctrl + W 를 눌러 클래스 위자드를 실행 시킵니다.
2) Message Map 탭 에서 Project, Class Name 을 확인 하시고, Object IDs 의 IDC_HELLO 따닥!
3) 오른쪽 Messages 에서 COMMAND 따다닥!
그럼 아래와 같은 그림이 나옵니다.

4) OK 버튼 따닥!

5) 아래쪽 Member functions 에서 OnHello 함수가 생긴것을 확인 하시고,
오른쪽 Edit Code 버튼 따닥!
::::: 8 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

그럼 다음과 같이, OnHello() 라는 함수가 생성 되었습니다~
즉, Ctrl + D 단축키를 누르면, OnHello() 함수가 호출 됩니다.
여기에다가, Hello~ Silzon 라는 대화상자를 띄어 보도록 합시다~! ㅋㅋㅋ
::::: 9 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
void CAcceleratorDlg::OnHello()
|
다음과 같이 코딩하고 실행 시켜 봅시다~
Ctrl + D 를 눌러 보아요!
.
.
.
.
역시.. 아무 반응이 없습니다. ㅋㅋ
맨처음에 설명 했듯이, 다음과 같은 과정이 필요 합니다.
1) 리소스로부터 가속키를 읽어, 가속키 테이블을 프로그램에서 설정
2) 기본 메세지가 처리 되기 전에 미리 PreTranslateMessage() 에서 메세지 처리
::::: 10 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

1) Class View Tab 에서, CAcceleratorDlg 오른쪽 마우스 따닥!
2) Add Member Variable... 따닥!

3) Variable Type 과 Variable Name 입력!
4) OK 따닥!
::::: 11 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

1) OnInitDialog() 따닥!
2) 다음과 같이 코딩!
|
.... .... SetIcon(m_hIcon, TRUE); // Set big icon m_hAccelTable = ::LoadAccelerators(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_ACCELERATOR1)); .... .... |
여기서 주의 할 점은 IDR_ACCELERATOR1 은
4번에서 우리가 만들어 준 Accelerator 이다.
::::: 12 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
자, 이제 PreTranslateMessage 함수를 코딩 해 보자.
이 함수는, 프로그램에서 발생하는 모든 Message 를 받아, 처리 할 수 있다.

1) Ctrl + W 를 눌러, 클래스 위자드를 실행 시킨다.
2) PreTranslateMessage 따다닥!
3) Member functions 에 PreTranslateMessage 생겼다 확인
4) Edit Code 따닥!
::::: 13 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

PreTranslateMessage 함수에 다음 내용을 코딩 한다.
|
BOOL CAcceleratorDlg::PreTranslateMessage(MSG* pMsg)
|
::::: 실행 및 결과 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
컴파일 후, 실행 시켜 보자.
Ctrl + D 단축키를 눌러보자!
그럼 다음 과 같은 결과가 뜨면 성공~ ^^

여기까지, 허졉 실존인물의 강의를 따라와 주셔서~ 모두 수고 하셨습니다. ㅋㅋ
휴~ 강좌 하나 만드는것도, 엄청 손이 많이 가는 작업이네요 ^^;;;
| 번호 | 제목 | 닉네임 | 조회 | 등록일 |
|---|---|---|---|---|
| 172 |
[Java] RawImage Display
|
![]() |
30 | 2012-04-30 |
![]() |
[MFC] 단축키 설정 방법
|
![]() |
378 | 2011-11-18 |
| 170 | [MFC] 다중 시리얼 포트 제어 | ![]() |
294 | 2011-11-17 |
| 169 | MFC EditBOX 자동스크롤 하기(세로스크롤) | ![]() |
335 | 2011-11-17 |
| 168 | ON_MESSAGE | ![]() |
264 | 2011-11-17 |
| 167 |
MFC로 시리얼 통신 프로그램 만들기
|
![]() |
1400 | 2011-07-21 |
| 166 |
자작로또프로그램(미완성)
|
![]() |
1839 | 2010-10-21 |
| 165 | API로 테트리스 만들기(미완성) | 재여리 |
1362 | 2009-08-21 |
| 164 | DestroyWindow 와 PostQuitMessage의 차이 | 재여리 |
2534 | 2009-08-17 |
| 163 | lstrlen 과 strlen에서 'l"의 차이는 무엇인가? | 재여리 |
2336 | 2009-08-13 |
| 162 | C언어 고급 문제 사이트 [1] | 재여리 |
2287 | 2009-08-12 |
| 161 | Linked list (array & pointer) | 재여리 |
1115 | 2006-05-08 |
| 160 |
[영상처리C++] 이미지 Edge Detection 프로그램
|
재여리 |
1997 | 2009-08-12 |
| 159 |
[영상처리C++] 이미지 뼈대 추출하기
|
재여리 |
1845 | 2009-08-12 |
| 158 |
[영상처리C++]관련 이미지 추출하기
|
재여리 |
2029 | 2009-08-12 |


