메세지 구분자는 정수형의 상수이다.
1024($0400) 이하의 영역은 위도우에서 사용되는 영역이다.
그래서 WM_USER 를 정의해 놓고 1 이상의 값을 더해 새로 정의해 사용하게 된다.
const
  WM_USER             = $0400;

그러나 이 경우에도 VCL 컨트롤의 메세지와 중복되는 경우가 있는데 다음이 이에 해당한다.
{ Edit Control Notification Codes }
const
  EN_ERRSPACE  = $0500;
  EN_MAXTEXT   = $0501;
  EN_HSCROLL   = $0601;
  EN_VSCROLL   = $0602;

사용되는 컨트롤을 파악하여 중복되는 메세지를 잘 피해야 할 것이다.

이 외에 WM_APP 를 이용하는 방법도 있지만, 이 또한 여러 Third-Party 컴포넌트와 섞이거나 내 것을 남이 쓰게 만들 경우 충돌 무결을 보장할 수 없다.
const
  WM_APP = $8000;

RegisterWindowMessage 함수를 사용하면 문자열을 통해 프로그램에서 자동으로 윈도우 메세지를 등록해주면 더 깔끔할 듯 싶다.
Delphi>
function RegisterWindowMessage(lpString: PChar): UINT; stdcall;

C/C++>
UINT RegisterWindowMessage(
    LPCTSTR lpString  // address of message string
   );

Exam>
var
  WM_TEST: UINT;
 begin
  WM_TEST := RegisterWindowMessage('Test Message');
end;



+ Recent posts