2011년9월6일_winAPI_WM_COMMAND메시지와 lParam, wParam의 값, 액셀러레이터(Accelerator), 메뉴편집기, 아이콘, 커서
● WM_COMMAND 메시지
프로그램 실행중에 사용자가 메뉴 항목을 선택하면 WM_COMMAND메시지가 발생한다.
이 때 어떤 메뉴 항목이 선택되었는가는 wParam의 하위 워드로 전달되므로 LOWORD(wParam)을 읽어 판단할 수 있다.
그 외에 액셀러레이터를 누를 때도 발생하며 또한 버튼, 에디트 박스 등의 컨트롤이 부모 윈도우로 통지 메시지를 보낼 때도 발생함.
메시지 발생 후 lParam과 wParam에는 상기의 그림과 같은 값들이 들어가게 각 값들의 의미는 아래의 표와 같다.
★아래의 도표는 무조건 외울 것
값 | 설명 |
lParam | 통지 메시지를 발생시킨 컨트롤의 윈도우 핸들 |
LOWORD(wParam) | 메뉴나 액셀러레이터, 컨트롤의 ID |
HIWORD(wParam) | 컨트롤이 보내는 통지 메시지로 액셀러레이터가 선택된 경우 1 메뉴가 선택된 경우 0 |
외울 것이 점점 많아 지는구나~ 죽을 때까지 공부합시다~
컨트롤은 나중에 할 것이라 자세한 설명은 생략하고 버튼, 에디트박스같은 것이다.
● 액셀러레이터(Accelerator)
윈도우즈에서 단축키(ShortCut)과 비슷한 것이다.
VS6.0에서 Ctrl + N키로 새로운 프로젝트나 새로운 파일들을 만들어 보았듯이 특수키를 사용해 메뉴를 빨리 접근하는 방법으로,
메뉴가 열린 상태에서만 사용가능한 Alt키를 쓰는 단축키(ShortCut)과 다르게 어떤 상태에서나 수행할 수 있다.
상기의 스크린샷에서 File메뉴의 F에 밑줄이 있다. 이렇게 밑줄이 있는 것을 단축키라고 하고,
더블클릭하여 속성창을 보면 File앞에 &가 붙여져 있다.
이 &의 의미는 Alt키와 F키를 동시에 눌러 File메뉴에 접근한다는 뜻이다.
액셀러레이터는 여기서 등록하는게 아니라 새로운 리소스를 만든다.
VS6.0메뉴 – Insert – Resource - Accelerator를 선택한 뒤 New버튼을 클릭하여 새로운 리소스를 만든다.
여기서도 Insert메뉴 앞에 I에 밑줄이 있다. 단축키로 접근이 가능하다는 뜻이다.
리소스편집창이 뜨면 파란색막대를 더블클릭하여 액셀러레이터 속성창을 연다.
ID에서 전에 만든 메뉴에 대한 ID를 찾고, Ctrl을 체크한 후에 Key값을 적으면,
Ctrl + A키로 해당메뉴를 접근할 수 있다.
실행파일과 링크는..
HACCEL hAccel; hAccel =LoadAccelerators(hInstance, MAKEINTRESOURCE(IDR_ACCELERATOR1)); |
● 메뉴편집기
//일단 생략
● 아이콘
메뉴 – Insert – Resource – Icon에서 New를 클릭하여 새로운 아이콘 리소스를 만든다.
사용법은 그림판과 비슷해 누구나 쉽게 그림을 그릴 수 있다.
실행파일과의 링크는…
WndClass.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1)); |
● 커서
메뉴 – Insert – Resource – Cursor에서 New를 클릭하여 새로운 커서 리소스를 만든다.
사용법은 아이콘과 비슷한데 흑백이라 화려하진 못 하다.
위에 보니 Monochrome [32 x 32]라고 적혀 있는 것을 보니 흑백말고..
후에 칼라로 업그레이드 가능한 것을 알 수 있다. 지금은 안 된다.
실행파일과 링크는..
WndClass.hCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_CURSOR1)); |
● 첨부 (전체소스코드)
'내장형하드웨어 > 일일보고서' 카테고리의 다른 글
2011년9월7일_winAPI_DC정보를 수정하여 그래픽출력을 달리하자. (0) | 2011.09.07 |
---|---|
2011년9월7일_winAPI_문자열테이블(String Table) (0) | 2011.09.07 |
2011년9월6일_ARM_AT91SAM7S256 타이머/카운터(TC) (2) | 2011.09.06 |
2011년9월5일_ARM_AT91SAM7S256 DBGU모드와 1Bytes송수신함수, 문자열을 전송하는 함수, 컴퓨터(PC)와 ARM보드간 RS232인터페이스로 연결하여 하이퍼터미널에서 입력한 문자로 ARM보드제어(LED, LCD등등) (0) | 2011.09.06 |
2011년9월5일_winAPI_리소스, 메뉴만들기 예제 (0) | 2011.09.05 |