2015. 4. 14. 07:08ㆍ프로그래밍/ETC
WM_COMMAND
프로그램 실행중에 사용자가 메뉴 항목을 선택하면 WM_COMMAND 메시지가 발생한다.
wParam의 하위 워드로 전달되므로 LOWORD(wParam)을 읽어 판단할 수 있다.
이를 switch문으로 메시지 처리를 해주면 된다.
WM_COMMAND 메시지는 엑셀레이터를 누를 때도 발생한다.
버튼, 에디트 박스 등의 컨트롤이 부모 윈도우로 통지 메시지를 보낼 때도 발생한다.
값 | 설명 |
lParam | 통지 메시지를 발생시킨 컨트롤의 윈도우 핸들 |
LOWORD(wParam) | 메뉴나 액셀러레이터, 컨트롤의 ID |
HIWORD(wParam) | 컨트롤이 보내주는 통지 메시지, 메뉴가 선택된 경우는 0이 되며 액셀러레이터가 선택된 경우는 1이 된다. |
LOWORD(wParam)을 읽어 어떤 메뉴가 선택되었는지를 판단할 수 있다.
3. 아이콘 커서
윈도우 클래스 부분에 MakeInterSource를 해주어야한다.
1 | WndClass.hCursor=LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1)); | cs |
안타깝게도 마우스가 스크린샷에 출력이 되지 않았다!!
4. 엑셀러레이터
단축키이다.
리소스에서 Accelerator 부분에 들어가 편집할 수 있다.
ID - 엑셀러레이터의 ID이며 엑셀레이터를 참조할 때 사용하는 값.
Key - 사용할 키.
Modifier? 이게 보조키를 의미하는 것이라 생각한다.
설명 - Key와 함께 눌러질 조합키. Ctrl, Alt, Shift를 개별적으로 또는 여러개를 한꺼번에 선택할 수 있다.
Type - 키 값이 아스키 코드값인지 가상키 코드값인지 설정한다. 보통 가상키 코드를 많이 사용한다.
엑셀러레이터 등록하기
Win32 프로젝트를 마침으로 생성하면 자동으로 추가 되어있는 엑셀레이터 추가 코드가 있다.
만약 처음부터 만드는 프로젝트라면 이걸 직접 추가해야겠지!
1 2 3 4 5 6 7 8 9 10 11 | hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT5)); // 기본 메시지 루프입니다. while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } | cs |
LoadAccelerators 함수
리소스로부터 엑셀러레이터 테이블을 읽어들이는 함수.
이 함수는 리소스에서 엑셀러레이터 테이블을 읽은 후 그 핸들값을 리턴해 준다.
TranslateAccelerator 함수
키보드 메시지를 WM_COMMAND 메시지로 변경해 주어 엑셀러레이터가 동작할 수 있도록 해 준다.
예시) Ctrl+A
Ctrl+A는 엑셀러레이터이기 이전에 키보드로부터 입력이므로 WM_KEYDOWN 메시지를 발생한다.
TranslateAccelerator 함수는 키보드 입력 값을 읽어 키 값이 엑셀러레이터 테이블에서 이를 확인한다.
테이블에 있다면? TRUE를 리턴해 Translate와 Dispatch가 실행되지 않도록 막고
다음번의 WM_COMMAND 메시지가 처리되로고 한다.
엑셀러레이터 입력이 아니라면 FALSE를 리턴하여 다른 메시지들은 정상적으로 처리되도록 한다.
5. 문자열 테이블
사용방법은 간단하다!
등록
우선 등록을 한다.
사용
1 | int LoadString( HINSTANCE hInstance, UINT uID, LPTSTR lpBuffer, int nBufferMax); | cs |
'프로그래밍 > ETC' 카테고리의 다른 글
Derek Wilson, "더블 버퍼링(Double Buffering), vsync, 그리고 트리플 버퍼링(Triple Buffering)은 무엇인가?" (3) | 2015.06.23 |
---|---|
FMOD 세팅하기 (0) | 2015.04.24 |
msimg32.lib, GDI (2) | 2015.04.23 |
GetKeyState, GetAsyncKeyState 차이 (0) | 2015.04.15 |
WinApi 정복 2장 (WinMain) (0) | 2015.04.14 |
winmain 구성 그림그려보기 (0) | 2015.04.11 |
winmain (0) | 2015.04.11 |