|
바로 아래의 다른 분의 질문에 대한 답변에서 메시지맵을 이용한 방법을 설명하면서 그 경우에 왜
메시지맵을 써야 하는지 설명했습니다. CM_MOUSEENTER와 CM_MOUSELEAVE 메시지는 VCL 컴포넌트들
사이에서만 주고받는 메시지이기 때문에 Application->OnMessage에는 걸리지 않습니다.
단, 버튼처럼 윈도우 핸들을 가지는 윈도우컨트롤의 경우라면 윈도우 프로시저를 바꿔치우는 방법을 쓸
수 있습니다. (윈도우 핸들이 없는 컨트롤의 경우에는 윈도우 프로시저가 아예 없으니 쓸 수 없죠)
기본적인 경험은 되시는 듯 하니, 세세히 설명을 드리기보다는 낙시하는 법을 알려드리지요.
GetWindowLong/SetWindowLong API 함수를 보시면, 윈도우 프로시저를 갈아치울 수 있습니다.
주의하실 것은,
1. 새로 갈아치운 윈도우 프로시저에서 필요한 메시지만 처리하고 나머지는 원래의 윈도우 프로시저를
호출하여 넘긴다.
2. 더이상 필요가 없어지면(예를 들어 해당 버튼이 파괴되었다든지) 반드시 SetWindowLong 함수를
호출하여 원래의 윈도우 프로시저로 다시 세팅해야 합니다.
그럼...
플그램 님이 쓰신 글 :
: BEGIN_MESSAGE_MAP 방식을 사용하지 않고 마우스 핸들에 따라 이미지를 지정해주는 방식이 있나 궁급합니다.
:
: void __fastcall TForm1::BitBtn1MouseDown(TObject *Sender,
: TMouseButton Button, TShiftState Shift, int X, int Y)
: {
: BitBtn1->Glyph......여기 다음에 뭔가 이미지 상대경로를지정해주는 방법이 있나 알고 싶습니다.
: }
:
: 감사합니다.
|