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
[49848] Re:Re:Re:메세지 주고 받기..
장성호 [nasilso] 1919 읽음    2007-07-10 11:35
방안2 의 에러는...


TWndMethod OrgWinProc;
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    OrgWinProc=this->WindowProc;
    this->WindowProc=WndProc2;
}
아마 위 부분에서 나는 에러인것 같은데요
함수형이 서로 안 맞아서 그런겁니다.



아마 아래 함수가
void __fastcall TForm1::WndProc2(Messages::TMessage &Message);
이 함수가  *.h 의 class TForm1 에 선언되어있지 않아서 그렇지 않을까하는 생각이 드네요


무슨말이냐면  TForm의 WindowProc는 class내부함수여야합니다.
뭐 다른 방법도 있지만...



볼랜드 어렵네요 ㅠㅠ 님이 쓰신 글 :
: 감사 합니다...
: 방안 1을 해보았는데.. Test는 잘됬습니다. ^^
: 방안 2는.. Cannot convert 'void[_fastcall *[_closure][TMessage *]..... 에러 나네용.. ㅠㅠ
: 방안 3은 않해봤어요.. 방안 1이 되서요 ^^
:
: 댓글 감사 합니다. 즐거운 하루 보네세요..
:
: 장성호 님이 쓰신 글 :
: : [문제원인]
: : 메세지 수신하는쪽에서요...
: :
: : void __fastcall TForm1::WndProc(Messages::TMessage *Message)
: : 그냥 위와같이 함수 선언해 둔다고 해서 WindowMessage가 저쪽으로 들어오지 않습니다.
: : 디버그 모드로 run한후에 Editer를 보세요
: : 아마 한번이라도 함수를 타게되면 에디터 왼쪽에 쩜이 찍히는데...
: : WndProc 함수는 찍혀있지 않을꺼예요
: :
: :
: : [해결방법]
: :
: : 방안1. Dispatch를 쓰던지 ...
: : virtual void __fastcall Dispatch(void *Message);
: : http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=542
: :
: :
: :
: : 방안2. 아니면 SubClassing 하는방법도 있구요
: :
: : TWndMethod OrgWinProc;
: : void __fastcall TForm1::FormCreate(TObject *Sender)
: : {
: :     OrgWinProc=this->WindowProc;
: :     this->WindowProc=WndProc2;
: : }
: : //---------------------------------------------------------------------------
: :
: : void __fastcall TForm1::WndProc2(Messages::TMessage &Message)
: : {
: :     OrgWinProc(Message);
: :    if( Message.WParam == 100 )
: :        ShowMessage("!");
: : }
: : //---------------------------------------------------------------------------
: :
: : 방안3. 메세지 맵을 쓰셔도 됩니다.
: :
: : *.h
: : void __fastcall TForm1::ShowMessageProc(TMessage& Msg);
: :
: :   BEGIN_MESSAGE_MAP
: :         VCL_MESSAGE_HANDLER(WM_USER + 1234, TMessage, ShowMessageProc)
: :   END_MESSAGE_MAP(TForm);
: :
: :
: : *.cpp
: : void __fastcall TForm1::ShowMessageProc(TMessage& Msg)
: : {
: :        if( Msg.WParam == 100 )
: :              ShowMessage("!");
: : }
: : .....
: :
: : 그럼....
: :
: :
: :
: : 볼랜드 어렵네요 ㅠㅠ 님이 쓰신 글 :
: : : 한개의 폼(exe)에다 이렇게 정의 해놓쿠..
: : : void __fastcall TForm1::WndProc(Messages::TMessage *Message)
: : : {
: : : //
: : :    if( Message->WParam == 100 )
: : :        ShowMessage("!");
: : : }
: : :
: : :
: : : 다른 폼(exe)에다가 이렇게 정의 했습니다.
: : : #define WM_USER_SHOWMSG WM_USER + 1234
: : :
: : :     HWND hWND = NULL;
: : :     hWND = FindWindow( 0, "Show");
: : :
: : :     if( hWND  != NULL )
: : :     {
: : :         PostMessage( hWND, WM_USER_SHOWMSG, 100, 0 );
: : :     }
: : :
: : : 왜 않되는지 좀 알려주세요...
: : : 인터넷 뒤지다가 나름 이해한 다음에 한건데..

+ -

관련 글 리스트
49845 메세지 주고 받기.. 볼랜드 어렵네요 ㅠㅠ 1215 2007/07/10
49846     Re:메세지 주고 받기.. 장성호 1478 2007/07/10
49847         Re:Re:메세지 주고 받기.. 볼랜드 어렵네요 ㅠㅠ 1306 2007/07/10
49848             Re:Re:Re:메세지 주고 받기.. 장성호 1919 2007/07/10
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.