MK_CONTROL, MK_SHIFT, MK_LBUTTON, MK_MBUTTON, MK_RBUTTON 도 있음.
HIWORD(lParam), LOWORD(lParam) / x랑 y
MOUSE 관련 애들은 NC가 붙어서 타이틀 창, 경계선 같은 작업영역 외의 마우스를 처리할 수 있다.
wParam은 (TCHAR)wParam 으로 변환하거나 VK_~~ 와 비교하거나, 아스키와 비교하면서 쓴다. 이 때 알파벳은 대문자랑만 비교한다. VK 는 가상키보드란 말이다.
KEYDOWN, CHAR, KEYUP은 앞에 SYS가 붙은 애가 따로 있다. 이건 alt와 함께 눌렸을 경우이다. 이때 DefWindowProc 도 처리가 되어야 한다. 안그러면 다른 Alt와 함께되는 애들이 먹통이 된다.
EM_SETSEL 은 에디트 윈도우의 경우 전체 내용을 반전처리할 하도록 디폴트로 되어있다.
메시지 관련 함수
LRESULT SendMessage(HWND hWnd, int MSG, WPARAM, LPARAM )
로 메시지를 Winproc 에 보낼 수 있다.
BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
로 메시지를 큐에 넣을 수 있다.
이 때 포인터를 넣으면 메모리 할당이 취소 될 경우도 있으므로 주의
BOOL InSendMessage();
BOOL ReplyMessage(LRESULT lResult);
InSendMessage 는 다른 스레드로부터 메시지를 받을 경우 참을 리턴한다.
ReplyMessage 는 SendMessage 로 메시지를 받았을 경우 그 함수에 lResult 값을 바로 리턴한다.
그래서 메시지 데드락 문제에 걸리지 않도록 한다.
BOOL SendMessageCallback(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam,
SENDASYNCPROC lpCallBack, ULONG_PTR dwData);
메시지를 보내고 callback 함수를 처리한 후 리턴한다.
long BroadcastSystemMessage(DWORD dwFlag, LPDWORD lpdwRecipients, UINT uiMesssage,
WPARAM wParam, LPARAM lParam);
글꼴 변경이 모든 윈도우에 적용해야할 메시지를 처리할 때 사용.
BSF_ 로 시작하는 옵션들을 플래그에,
BSM_ 으로 시작하는 메세지를 보낼 대상 그룹을 recipients 에 넣으면 된다.
UINT RegisterWindowMessage(LPCTSTR lpString);
임의의 이름을 넣어서 레지스터에 없는 경우는 중복되지 않은 메시지 번호를,
있는 경우는 등록된 메시지 번호를 리턴한다.
WM_APP + n 을 기억하지 않아도 되게 한다.
댓글 없음:
댓글 쓰기