C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[22237] Re: 일단 틀린 이유는요..
김상구.패패루 [peperu] 1057 읽음    2002-10-25 10:45
일단 틀린 이유는..

    BEGIN_MESSAGE_MAP
        VCL_MESSAGE_HANDLER(WM_INITDIALOG, , OnInitDialog)
    END_MESSAGE_MAP(TForm)

가 아니고

    BEGIN_MESSAGE_MAP
        VCL_MESSAGE_HANDLER(WM_INITDIALOG, TMessage, OnInitDialog);
    END_MESSAGE_MAP(TForm);

이런 식으로 하셔야 합니다.

첫번째 인자는 잡아낼 메시지
두번째는 C++ Builder에서 매핑할 메시지클래스명(그냥 TMessage로 하면 일단 다 잡아냅니다. TWM으로 시작하는 각종 메시지클래스들을 도움말에서 찾아보시면 많이 도움이 되실겁니다)
세번째는 그걸 다룰 메시지 핸들러의 이름입니다.
On...로 시작하는 것들은 주로 VCL의 이벤트 핸들러들이고 이들은 메시지 핸들러랑은 구조가 다릅니다.

void __fastcall OnInitDialog(TMessage &Msg);

이렇게 선언해서 직접 구현하시면 됩니다.
보통은 이런 메시지 핸들러는 WMInitDialog 와 같이 WM으로 시작하는 이름을 붙이는 경우가 많습니다. 굳이 이벤트까지 뽑아내고자 할 때는 이런 식으로 합니다.

class TMyForm : public TCustomForm
{
private:
  TNotifyEvent FOnInitDialog;
......
protected:
  void __fastcall WMInitDialog(TMessage &Msg);
.........
__published:
  __property TNotifyEvent OnInitDialog = {read=FOnInitDialog, write=FOnInitDialog};
.......
public:
  BEGIN_MESSAGE_MAP
      VCL_MESSAGE_HANDLER(WM_INITDIALOG, TMessage, WMInitDialog);
  END_MESSAGE_MAP(TForm);
  ......
}

뭐 이렇게 있다면..
void __fastcall TMyForm::WMInitDialog(TMessage &Msg)
{
  // 내가 원하는 처리를 하고
  // 이벤트를 콜 하고자 할 때는
  if (FOnInitDialog)
    FOnInitDialog(this);
}

MFC랑은 좀 다를겁니다. 아마. 일단 VCL의 동작 흐름을 파악하시는게 가장 급선무로 보이는군요..
이 곳 질답들을 검색해 보시고 하면 좋은 결과 얻으실 수 있을겁니다.



+ -

관련 글 리스트
22226 VC++쓰다가 BCB로 그러나 푸념..(도데체 Message Handler는 어떻게 등록하는거야?) serial 963 2002/10/24
23732     Re:VC++쓰다가 BCB로 그러나 푸념..(도데체 Message Handler는 어떻게 등록하는거야?) Jeongkyu Kim 1154 2003/01/18
22237     Re: 일단 틀린 이유는요.. 김상구.패패루 1057 2002/10/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.