방안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 );
: : : }
: : :
: : : 왜 않되는지 좀 알려주세요...
: : : 인터넷 뒤지다가 나름 이해한 다음에 한건데..