|
인스턴스 서브클래싱이라는 것이 윈도우(버튼.. 기타등등) 마다 별도로
메시지를 처리하는 윈도우 프로시저 번지를 지정하는 것일텐데요.
A->WindowProc = 어쩌고~~();
B->WindowProc = 저쩌고~~();
하지만 다른 부분은 공통으로 사용하고
마우스 무브 고것만 따로 하고자 한다면...
API함수 중에 SetWindowLong() 을 사용해서
서브클래싱 프로시저를 지정해 주어야 할 듯 싶어요.
API 프로시저 인수에는 HWND가 있으니까 고것으로 구분이 가능할듯.
근데 이거 무지 조심스럽네요 ㅋㅋ
써놓고 확인하니 장성호님이 답글을 너무 잘달아 주셨네요 ^^;;
그래도 이왕쓴거라 올려봐용~
이용태 님이 쓰신 글 :
: 예를 들어 3개의 버튼(A, B, C)이 있습니다.
:
: 그리고 서브클래싱을 이용하여 마우스무브 메시지가 발생할 경우 특정 작업 a()를 버튼 A에 대해서만 수행합니다.
:
: 즉 버튼 A위에서 사용자가 마우스를 움직일 경우 a() 작업을 수행하고 B, C 버튼의 경우에는 a() 작업을 수행하지 않도록 할려고 합니다.
:
: 그런데 서브클래싱할땐 TMessage *msg만 넘어갈뿐, TObject *Sender 전달인자가 넘어가지 않기 때문에... 발생하는 마우스무브 메시지가 어떤 버튼에서 일어나는지 알수가 없더군요...
:
: 지금은 임시방편으로 마우스가 버튼 위로 올라갔을 경우, 불변수를 만들어놓아 현재 어떤 버튼위에 마우스가 올라갔는지를 알아내고, 그 불 변수를 이용하여 서브클래싱 함수에서 메시지를 걸러 a() 함수를 수행하고 있습니다.
:
: 이렇게 하는 방법말고.. 더 좋은 방법이 있지 않을까요??
:
: 현재 마우스무브 메시지가 어떤 버튼 컨트롤에서 일어나고 있는지를 알기위해선 어떻게 해야 할까요?
:
: 답변 부탁드립니다.
|